Node.js MVC Construction Rabbit.js MVC @ Rabbit.js a fast - - PowerPoint PPT Presentation

node js mvc construction
SMART_READER_LITE
LIVE PREVIEW

Node.js MVC Construction Rabbit.js MVC @ Rabbit.js a fast - - PowerPoint PPT Presentation

Node.js MVC Construction Rabbit.js MVC @ Rabbit.js a fast and light mvc framework for Nodejs https://github.com/xinyu198736/Rabbit.js sudo npm install rabbitjs -g FAST LIGHT why use it light


slide-1
SLIDE 1

Node.js MVC Construction

⽤甩Rabbit.js快速构建MVC应⽤甩

@芋头君

slide-2
SLIDE 2

Rabbit.js

a fast and light mvc framework for Nodejs

https://github.com/xinyu198736/Rabbit.js sudo npm install rabbitjs -g

slide-3
SLIDE 3

FAST LIGHT

slide-4
SLIDE 4

why use it?

  • light 轻量级,基于常⽤甩的库,快速学习
  • fast development 约定⼤夨于配置,模式固定
  • Multi-Layer Architecture 清晰的分层
  • Database agnostic unified API for sql and nosql,base on ORM
slide-5
SLIDE 5

View

Multi-Layer

Controller Model Service Filters request

slide-6
SLIDE 6

Hello World

sudo npm install rabbitjs -g rabbit create npm install node server.js visit http://localhost:8080

slide-7
SLIDE 7

Begin from Model

Database 数据库定义 Operation 数据操作 数据定义 ORM BaseModel sequelize mongoose

slide-8
SLIDE 8

module.exports = { id: { type: "int", autoIncrement: true, primaryKey: true }, name: "varchar(255)", desc: "text", age: "int" };

Mysql(teacher.js) MongoDB(teacher.js)

module.exports = { name: String, desc: String, age: Number }

var Teacher = new BaseModel(‘teachers’); var Teacher = new BaseModel(‘teachers’,’mongo’);

slide-9
SLIDE 9

Promise 链式操作

var Teacher = new BaseModel('teachers'); //查询所有,带着条件 Teacher.getAll() .where({id:{lt:3}}) .ofgset(0).limit(10) .order({id:”desc”}) .fields([‘id','name','age']) .done(function(error,teachers){

  • })

抽取原⽣甠ORM对象

Teacher.Model

getAll getById getByField update delete count add addCount where

  • ffset

limit fields

  • rder
slide-10
SLIDE 10

Then Service

service 业务的抽象层

⻋轧辆管理类 学⽣甠档案管理类 教师管理类 组合数据的访问 Keep controller clear 供不同的controller复⽤甩

slide-11
SLIDE 11

Controllers

请求分发 业务逻辑组合 渲染结果

Base on Express.js

slide-12
SLIDE 12

Restfull Auto generate routes by file structure

URL: http://localhost:8080/teacher/add File System: controllers/teacher/index.js module.exports = { ‘/add’:{ get:function(){ return function(req,res,next){ next(); } } } }

Auto Render Views rabbit controller -n teacher #创建controller模板

slide-13
SLIDE 13

Filters

preFilter

前置过滤,前置检查

afterFilter

数据格式化,渲染前处理,jsonp兼容等

globalFilter

全局配置的filter,登录检查等 拆散的中间件 middleware

slide-14
SLIDE 14

var service_teacher = loadService(‘teacher’); module.exports = { ‘/add’:{ get:function(){ this.userFilter([‘checkLogin’]); this.userAfterFilter([‘jsonp’]); return function(req,res,next){ service_teacher.add(req.query) .done(function(error,teacher){ if(error) next(error); else next(); }); } } } } module.exports = { ‘/example/.*': { get: ['checkLogin'] } }

全局filter配置,filter.config.js

slide-15
SLIDE 15

Views

  • 默认 Jade 渲染
  • res.render(“teacher/add.jade”) or auto render
  • 从 res.locals中取数据。
  • app.locals.moment = require(“moment”);
slide-16
SLIDE 16

Others

Timing tasks

可配置的定时任务系统,crontab

plugin

⽤甩命令⽣甠成常⽤甩的功能,例如⽤甩户系统,表单验证等

scafgold

脚⼿扌架,根据model⾃臫动⽣甠成增删改查的代码和界⾯靣

slide-17
SLIDE 17

Other MVC frameworks

Sails.js Geddy.js Express.js

like ruby on rails ,realtime framework A simple, structured web framework for Node much more base library,network framework

slide-18
SLIDE 18

Thanks

slide-19
SLIDE 19

芋头君@微博

F2E招聘

mier963@微信