0

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

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]));
  });
});

为了确保我不会重复太多,但仍然......

4

1 回答 1

1

您可以使用*通配符来代替星号将路由器应用于所有 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变量。

于 2016-04-11T03:49:04.743 回答