gpt4 book ai didi

javascript - Express.js 查看 "globals"

转载 作者:IT老高 更新时间:2023-10-28 21:54:12 25 4
gpt4 key购买 nike

我正在使用 Express.js(在 Node.js 上),我知道您可以通过“locals”参数呈现带有自定义数据的 View 。 (res.render("template", { locals: { foo: "bar"} });)

有没有办法拥有“全局”? (即每个 View 都可以访问的数据)

我看到了 view options,但这不是递归的,所以如果我在模板中使用任何局部变量,它会替换我设置的局部变量。

这是我的用例:我想让它可以在每页的基础上添加 CSS/JS 文件,这是我主要布局的一部分。问题是,如果我没有在每次渲染时明确设置这些数组,我会得到一个未定义的错误,所以在我的模板中我总是必须做 typeof css !== "undefined" 舞蹈。此外,我还有其他选择框选项列表,我不想显式添加到我的每个表单中。

最佳答案

对于自 Express 3 发布以来可能遇到此问题的人来说,值得注意的是,“dynamicHelpers”方法不再存在。

相反,您可以使用 app.locals 函数,该函数充当您可以在其中存储值或函数的对象,然后将它们提供给 View 。例如:-

// In your app.js etc.
app.locals.title = "My App";
app.locals({
version: 3,
somefunction: function() {
return "function result";
}
});

// Then in your templates (shown here using a jade template)

=title
=version
=somefunction()

// Will output

My App
3
function result

如果您需要访问请求对象以从中提取信息,您可以编写一个简单的中间件函数并使用 app.settings 变量。

例如,如果您使用 connect-flash 向您的用户提供消息,您可能会执行以下操作:

app.use(function(req, res, next) {
app.set('error', req.flash('error'));
next();
});

这将使您可以访问模板中带有 =settings.error 的错误消息。

这些主题在此处进行了介绍,尽管有些简短:http://expressjs.com/api.html#app.locals

更新:Express 4

app.locals 现在是一个简单的 JavaScript 对象,所以每个属性都必须一个一个地设置。

app.locals.version = 3;
app.locals.somefunction = function() {
return "function result";
}

res.locals 提供完全相同的功能,除了它应该用于请求特定的数据而不是应用程序范围的数据。用户对象或设置是常见的用例。

res.locals.user = req.isAuthenticated() ? req.user : null;
res.locals.userSettings = {
backgroundColor: 'fff'
}

关于javascript - Express.js 查看 "globals",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4718818/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com