next()调用ExpressJS中已挂载应用程序的中间件

时间:2013-05-23 12:14:02

标签: node.js express

我有一个Express应用程序:

var site = new express();

然后我将管理部分设为子应用程序:

var admin = new express();
admin.get("/users", function(req, res) {...});

最后,我使用权限检查中间件将管理员app安装到主站点上:

var isAdmin = function(req, res, next) {
    if (!req.user.admin) {
        return res.send("403");
    }
    next();
};

site.use("/admin", isAdmin, admin);

问题是:当我打开/admin/users页面时,权限检查中的next()调用最终导致404。我觉得它在 site 中调用了下一个回调函数,而不是进入 admin

如果我删除权限检查中间件,请按以下方式编写:

site.use("/admin", admin);

然后可以正确访问/admin/users。当然没有任何ACL ......

问题是如何让代码进入中间件链中的 admin 子应用程序?

1 个答案:

答案 0 :(得分:0)

嗯......在我发布这个问题后,我意识到我的代码应该是这样的:

var site = new express();

var admin = new express();

var isAdmin = function(req, res, next) {
    if (!req.user.admin) {
        return res.send("403");
    }
    next();
};

admin.use(isAdmin);
admin.get("/users", function(req, res) {...});

site.use("/admin", isAdmin, admin);

差异是isAdmin现在应用于子应用。这很有效。