node.js - 异步添加快捷路线

标签 node.js express

在我的 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/

相关文章:

下载文件时,Node.js 在 HTTP get 上挂起

Javascript嵌套数组单元素修改转换为整个数组修改

node.js - 使用 sails.js 修改响应 header 以实现 HSTS

javascript - 如何查询子数组中的条目与所有条件匹配的文档?

javascript - 请求正文与提交的数据不同

node.js - 将错误从嵌套函数传递到集中式错误处理程序的最佳实践或方法是什么

node.js - 在高负载下连接 nodejs 中的 EADDRNOTAVAIL - 如何更快地释放或重用 TCP 端口?

javascript - 我使用 axios 发送的数据在配置中返回,而不是数据

javascript - 在 Express 中间件中访问 session 对象

express - 当 OWASP 说你不应该 "send raw responses to clients"时是什么意思?