使特定于路线的代码适用于所有路线?

Make route-specific code apply to all routes?

我有一个管理面板,我可以在其中自定义网站名称、标语等内容。下面的代码完全符合我的要求,但仅适用于索引页:

app.get("/", function (req, res) {
  app.service("customization").find().then(function (result) {
    res.render("index", Object.assign({ layout: "layouts/default" }, result[0]));
  });
});

如何将其应用到所有路由(因此,整个站点)?我试过用 * 代替 /,但没有用。

编辑:将 / 替换为 * 并将这段代码放在我所有的路由之前,使每个页面都呈现我的 index 视图,这并不理想。目前,我将为每条路线复制此代码,更改路线和视图选项。我有这样的代码:

app.get("/admin/:page", require("connect-ensure-login").ensureLoggedIn("/admin"), function (req, res) {
  app.service("customization").find().then(function (result) {
    res.render("admin/" + req.params.page, Object.assign({ user: req.user, title: "Admin", layout: "layouts/admin" }, result[0]));
  });
});

为了确保我没有重复太多,但仍然...

您可以使用 * 作为通配符,以将路由器应用于所有 URL 以代替星号。

但是,如果您需要在其余路由器中重用异步结果,以下是一个很好的方法。在路由器之前执行异步调用,并在其余路由器中使用result

app.use(function(req, res, next) {
    app.service("customization").find().then(function (result) {
        app.set('result', result);
        next();
    });
});

这将设置一个应用程序变量,可以使用 app.get 从任何地方 服务器端 访问该变量。

注意异步回调中 next() 的要求。应用程序将等待 result 后再继续,确保您不会在没有它的情况下移动到下一个路由器。

app.get("/", function (req, res) {
    res.render("index", Object.assign({ layout: "layouts/default" }, app.get('result')[0]));
});

在您的路由器中,您可以根据需要使用 app.get 访问 result 变量。