在expressJS中处理路由的最佳实践是什么

时间:2014-05-22 23:10:18

标签: javascript node.js express routing routes

我习惯用ExpressJS写这样的路线:

var app = express();
app.get('/something', function(req, res){});

但是我已经看到了ExpressJS的全新v4,我们现在可以像这样的中间件使用express.router():

var app = express();
var router = app.Router();
app.use(router);

router.get('/something', function(req, res){});

所以我的问题是,两者之间真正的区别是什么,最佳做法是什么?

提前谢谢!

2 个答案:

答案 0 :(得分:2)

我认为这只是一个偏好问题。我个人更喜欢你上面提到的原始方式,因为我可以使用应该运行的代码保留路由(我通常将此逻辑拉入单独的文件中):

app.js (类似于:https://gist.github.com/dylants/6705338

// ...

// pull in all the controllers (these contain routes)
fs.readdirSync("controllers").forEach(function(controllerName) {
    require("./controllers/" + controllerName)(app);
});

// ...

<强>控制器/我的-controller.js

module.exports = function(app) {
    app.get("/api/my-uri", function(req, res) {
        // ...
    });
};

同样,这样做可以让我自己控制单独文件中的URI,这样人们就可以独立工作了。也就是说,其他人喜欢将所有路由放在同一个文件中,因此可以同时查看它们(类似于Rails有路由命令的方式)。可能最好咨询团队成员,看看他们喜欢哪些。

答案 1 :(得分:2)

代码组织的差异。

建议使用router.route()来避免重复的路由命名,从而避免拼写错误。

使用以下语法安装,测试非常简单:

router
  .route('/')
   .all(function(req,res,next){ next(); })   
   .get(...)
   .post(...)
   .put(...)
   .delete(...) 

 router.param('id',function(req,res,next,id){ ... })     
 router.use('/feedback', anotherSubRouter); // will /my-mount-point/feedback

 ... somewhere in app

 app.use('/my-mount-point', router);
 app.use('/api', apiRouter);

 ...etc

官方文档here