关于请求路由的一点想法
发布于 11 年前 作者 dengqiao 5365 次浏览 最后一次编辑是 8 年前

从加装涡轮,提速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中也应该使用类似的路由规则。 <pre><code> controller/user.js

exports.add = function (req,res){ } exports.update = function (req,res){ } </pre></code>

对应的url就应该是/user/add /user/update,以上就是个人对路由的一点看法,还请各位就行深入讨论

刚刚按照这个想法,在express的基础上写了一个简单的实现

<pre><code> 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(); } }) </pre></code>

5 回复

不喜欢ruby那套~

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

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

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

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

回到顶部