在我的 Node.js/Express 应用程序中,我想加载一些路由以异步表达。准确地说,我想从 mongodb 中检索促销代码,并根据这些代码创建动态路由。
我目前有这个代码:
var promotion = require('../models/promotion');
promotion.list(function(promotions) {
// Loop all promotions
_.each(promotions, function(promo) {
app.route(promo.get('path')).get(promotion.claim);
});
});
不幸的是,这不起作用。经过一番调试后,我发现路由实际上已添加到路由列表中,但由于它们是异步加载的,因此它们是在最后添加的“catch all”路由之后添加的。我通过检查发现:
console.log( app._router.stack );
我读过一些解决方案,涉及在该函数中添加捕获所有规则并处理路由路径,但老实说,这听起来不太好。我想继续使用 app.route() 作为我的其他路线。
最佳答案
一揽子规则仍然是处理它的最佳方法。您仍然可以将 app.route() 用于其他路线。以下是可以在 app.js 中使用的示例:
function r1(req,res) { res.status(202).end(); } //todo action logic
function r2(req,res) { res.status(202).end(); } //todo action logic
app.set("dynamic.routes", {"/r1":r1, "/r2":r2});
//this is dynamic routing function
function handleDynamicRoutes(req,res,next) {
var path = req.path;
var routes = app.get("dynamic.routes");
if (routes[path]) {
routes[path](req,res);
} else {
next();
}
}
app.all('*', handleDynamicRoutes);
app.use('/users', require('./routes/users')); //just an example
app.use('/documents', require('./routes/doucments')); //ditto
显然,您可以随时更改您的dynamic.routes。 您可以根据需要灵活地进行操作,包括使用 Express 的路线。
关于node.js - 异步添加快捷路线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27302904/