关于请求路由的一点想法
发布于 2年前 作者 dengqiao 944 次浏览

从加装涡轮,提速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(); } })

5 回复

不喜欢ruby那套~

各有千秋吧,我觉得两种我都能接受

喜欢手动配置路由的就用express,喜欢自动路由解析的就用rrestjsrrestjs也加入了手动配置!

重新编辑了下,rrestjs抛弃了express,我的实现是在express上实现的

一直都在手动配置路由。。。

回到顶部