使特定于路线的代码适用于所有路线?
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
变量。
我有一个管理面板,我可以在其中自定义网站名称、标语等内容。下面的代码完全符合我的要求,但仅适用于索引页:
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
变量。