资源分离技巧
一个返回 user 页 数据的例子:
路由文件 router/user.js
var router = require("express").Router();
router.get("/",function(req,res){
res.locals.user = {
name : 'leo',
age:22
}
res.locals.page = {
title : "jsera.net 专注于HTML5 & Node.js技术推广与应用"
}
res.render("user");
})
module.exports = router;server.js
var express = require('express');
var path = require("path");
var app = express();
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use("/user",require("./router/user"));
app.listen(3000);jade 模版文件views/user.jade
doctype html
html
head
title= title
body
p name is #{user.name}
p age is #{user.age}这里只是个例子,感觉很简单,我们回头看一下router/user.js会发现它的数据和路由是合在一起的,例子很简单,感觉不出缺点,下面的伪代码,让我们深刻感受到混乱:
var router = require("express").Router();
router.get("/",function(req,res){
db("user1",function(u1){
res.locals.user1 = u1;
db("user2",function(u2){
res.locals.user2 = u2;
db("user3",function(u3){
res.locals.user3 = u3;
db("user4",function(u4){
res.locals.user4 = u4;
res.render("user");
})
})
})
})
})
module.exports = router;数据和路由功能合在一起后,造成混乱的局面,下面是修改后的代码:
router.get("/",user1,user2,user3,user4,function(req,res){
res.render("user");
})这样就清爽多了,其中user1代码:
function user1(req,res,next){
db("user4",function(u4){
res.locals.user4 = u4;
next();
})
}以上是伪代码,下面我们把 路由文件 router/user.js 做一下修改:
var router = require("express").Router();
function page(req,res,next){
res.locals.page = {
title : "jsera.net 专注于HTML5 & Node.js技术推广与应用"
}
next();
}
function user(req,res,next){
res.locals.user = {
name : 'leo',
age:22
}
next();
}
router.get("/",page,user,function(req,res){
res.render("user");
})
module.exports = router;不要极端
上述代码,感觉路由器本身就是一行渲染代码res.render,其实这里可以是一个 action 或叫 controller ,所以逻辑代码可以放在这里,下面的伪代码说明如何掌握这个度:
var router = require("express").Router();
router.get("/",page,user,function action(req,res){
if(locals.user.name === "leo"){
locals.user.admin = true;
}else{
locals.user.admin = false;
}
if(locals.user.age > 18){
locals.user.adults = true;
}
res.render("user");
})
module.exports = router;上面代码说明了,逻辑代码要放在路由器当中,进入路由器之前的 验证和数据 需要和路由器分离。(这么说有些武断,我认为这种分离是最合理的,并不是强制一定要这样,可根据自己的理解对这种分离技巧,进行优化)。