layout: post category: lessons title: “自己搭建Node+Express+Redis的MVC框架(六)” tagline: “Supporting tagline” tags: [intro, beginner, jekyll, tutorial]

与Express结合

module_users = require './routes/module_users.coffee'
app.get 'users',module_users.list
  • 流程很简单
  1. 引用模块文件

  2. 调用模块文件中的方法,前提是你要将方法输出,请参见下面的引用

测试

Controller控制器

Express路由原理

  • 在app.coffee文件中定义路径,添加引用
index = require './routes/index.coffee'
app.get 'index',index.list
  • 在routes/index.coffee中定义方法,输出引用
list=(req,res)->
	res.render 'index',{title:"Hello Express"}
module.exports.list = list
  • 这样实现了Controller和Module之间的双向通信

  • 其中req是http请求,res是http回应,具体可参考Express手册中文版

常用的Express API

  • req.body

  • 这个对应的是解析过的请求体。这个特性是bodyParser() 中间件提供,其它的请求体解析中间件可以放在这个中间件之后。当bodyParser()中间件使用后,这个对象默认为 {}。

// POST user[name]=tobi&user[email]=tobi@learnboost.com
req.body.user.name
// => "tobi"
  • req.params

  • 这是一个数组对象,命名过的参数会以键值对的形式存放。 比如你有一个路由/user/:name, "name"属性会存放在req.params.name. 这个对象默认为 {}.

// GET /user/tj
req.params.name
// => "tj"
  • res.render(view, [locals], callback)

  • 渲染view, 同时向callback 传入渲染后的字符串。 callback如果不传的话,直接会把渲染后的字符串输出至请求方, 一般如果不需要再对渲染后的模板作操作,就不需要传callback。 当有错误发生时next(err)会被执行. 如果提供了callback参数,可能发生的错误和渲染的字符串都会被当作参数传入, 并且没有默认响应。

res.render 'index', (err, html)->
	console.log "index.html"
res.render 'user', { name: 'Tobi' }

Javascript的模块输出和引用

  • 需要使用module.exports方法
list=(req,res)->
	Users.list   (err, user)- >
        		console.log(err, user.id)
module.exports.list = list
  • 这样你的list函数可以被其它文件引用了

  • 有时候可以更加简化

module.exports.list=(req,res)->
	Users.list   (err, users)- >
        		console.log(err)