Express - 将数据传递给所有路由

5

你好,有没有一种“express”特定的方法可以使一些全局应用程序数据对所有我的路由可用? 还是只需要使用一个module.exports语句? 欢迎任何指针。 顺便说一句,我是 Node 新手。

3个回答

11
你可以设置一个全局对象,该对象也可在你的布局中使用。 app.js
app.configure(function(){
  app.set('view options', {pageTitle: ''});
});

app.get('/',function(request, response){
  response.app.settings['view options'].pageTitle = 'Hello World';
  response.render('home');
});

layout.jade

!!!
html
  head
    title= pageTitle
  body!= body

7

您可以在应用程序的设置部分使用app.set(),使其对每个请求都可用。在您的路由中,可以通过req.app访问应用程序对象。

个人建议在设置中使用app.set('name', obj);,并在路由中通过req.app.settings.name访问它。


1
你的意思是 res.app 而不是 req.app,对吗? - FireZenk

2
你还可以使用动态辅助函数来将数据传递给所有视图。 app.js
// Dynamic Helpers
app.dynamicHelpers({
    appSettings: function(req, res){
        return {name:"My App", version:"0.1"};
    }
});

现在你可以像这样在视图中使用它(我在这个例子中使用了ejs,但它应该适用于jade或任何其他视图引擎):

view.ejs

<%= appSettings.name %> 
<%= appSettings.version %> 

希望这能帮到你。

3
你的回答的缺点是每个请求都会处理助手。对于像版本这样的静态数据,最好使用 app.set('view options', someData) 。DynamicHelpers 适用于动态数据。 - jackdbernier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接