Express 4.8.x—资源分离技巧
一个返回 user 页 数据的例子:路由文件 router/user.js
资源分离技巧
一个返回 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;
上面代码说明了,逻辑代码要放在路由器当中,进入路由器之前的 验证
和数据
需要和路由器分离。(这么说有些武断,我认为这种分离是最合理的,并不是强制一定要这样,可根据自己的理解对这种分离技巧,进行优化)。
很赞哦! ( 0
)