从加装涡轮,提速expressjs 这个配置路由http://cnodejs.org/topic/51c3ef9f73c638f37058e6bc/说开来,当前每加一个url就要配置一条路由规则,自从受过rails的DRY(don’t repeat yourself )的影响后,本人对这种配置方式表示很反感。我是搞java的,java中struts的也遵守了DRY规则。举个例子。struts的默认路由规则是packageName/controllerName!functionName.action,url是/manager/user!add.action,很自然,我觉得在node.js中也应该使用类似的路由规则。
controller/user.js
exports.add = function (req,res){
}
exports.update = function (req,res){
}
对应的url就应该是/user/add /user/update,以上就是个人对路由的一点看法,还请各位就行深入讨论
刚刚按照这个想法,在express的基础上写了一个简单的实现
var routes = {};
//初始化路由对象
var routelist = fs.readdirSync('./routes')
routelist.forEach(function (filename){
console.log('find route file '+ filename);
var fullname = __dirname +'/routes/'+filename;
console.log('full name '+ fullname);
routes[filename.split('.')[0]] = require(fullname);
});
app.all("/:controller/:funcName",function(req,res,next){
if(routes[req.params.controller]&& routes[req.params.controller][req.params.funcName]){
//调用方法
routes[req.params.controller]
[req.params.funcName](req,res);
}else{
console.error(“controller “+ req.params.controller+” or ,funcName “+ req.params.funcName+” is undefined”);
next();
}
})