我习惯用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){});
所以我的问题是,两者之间真正的区别是什么,最佳做法是什么?
提前谢谢!
答案 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