跳到主要内容
CNode

关于请求路由的一点想法

社区
Ddengqiao发布于 13 年前最后回复 13 年前
566040

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

Y
yumen3501#513 年前

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

D
dengqiao#413 年前
引用 a272121742喜欢手动配置路由的就用express,喜欢自动路由解析的就用rrestjs。rrestjs也加入了手动配置!

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

A
a272121742#313 年前

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

S
sumory#213 年前

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

X
xieren58#113 年前

不喜欢ruby那套~

参与回复

登录后即可参与回复。登录