在有机会学习 Express 3 API Reference
之后,我发现了我想要的东西。具体来说,关于条目的内容app.locals
,然后再往下一点,res.locals
保存了我需要的答案。
我自己发现该函数
app.locals接受一个对象并将其所有属性存储为作用于应用程序的全局变量。这些全局变量作为局部变量传递给每个视图。
res.locals但是,该函数的作用域是请求,因此,响应局部变量仅可用于在特定请求/响应过程中呈现的视图。
所以对于我来说,我
app.js所做的就是添加:
app.locals({ site: { title: 'ExpressBootstrapEJS', description: 'A boilerplate for a simple web application with a Node.JS and Express backend, with an EJS template with using Twitter Bootstrap.' }, author: { name: 'Cory Gross', contact: 'CoryG89@gmail.com' }});然后,所有这些变量都在我的意见,访问
site.title,
site.description,
author.name,
author.contact。
我还可以使用定义每个请求响应的局部变量
res.locals,或者简单地将诸如页面标题之类的变量作为调用中的
options参数传递
render。
编辑: 此方法将 不会
让你在你的中间件使用这些本地人。实际上,正如Pickels在下面的评论中建议的那样,我确实碰到了这一点。在这种情况下,您将需要在他的替代(和赞赏的)答案中创建一个中间件功能。您的中间件功能需要
res.locals为每个响应将它们添加到中,然后调用
next。该中间件功能将需要放在需要使用这些本地语言的任何其他中间件之上。
编辑:
通过
app.locals和声明局部变量之间的另一个区别
res.locals是,
app.locals变量被设置为单个时间,并在应用程序的整个生命周期中持续存在。
res.locals在中间件中设置本地人时,每次收到请求时都会进行设置。基本上,您应该更喜欢通过设置全局变量,
app.locals除非该值取决于
req传递给中间件的请求变量。如果该值未更改,则只需将其设置一次将更加有效
app.locals。



