0

我正在使用 Express 3.0 和 Swig 作为我的模板引擎开发 NodeJS 应用程序。我想要完成的是将渲染参数传递给下一个路由。我想要这样做是因为我的网站的每个页面上都存在某些网站组件(侧边栏、导航栏、页脚等)。这些组件中的每一个都有可以打开和关闭的小部件和链接。现在我正在执行以下操作来切换这些小部件:

response.render('network.html', {
  activeTab: 'network',
  username: request.session.username,
  bread_current: 'Network',
  page_title: 'Your Network',
  page_subtitle: 'Mordrum',
  widgets: {
    navbar: {
      chats: {
        enabled: true,
        color: 'blue',
        icon: 'chatbubble'
      }, messages: {
        enabled: true,
        color: 'red',
        icon: 'mail'
      }, users: {
        enabled: true,
        color: 'green',
        icon: 'person'
      }
    }
  }
})

那里有很多参数(在小部件对象中),我最终在我的代码中重复了很多次(每个路由一次)。我想知道是否有办法将 args 传递到下一条路线。

4

2 回答 2

2

如果数据是静态的(它不会在运行应用程序的过程中发生变化),请使用app.locals它来存储它。存储在其中的任何数据都将自动可供任何模板使用:

app.locals.widgets = {
  navbar: {
    chats: {
      enabled: true,
      color: 'blue',
      icon: 'chatbubble'
    }, messages: {
      enabled: true,
      color: 'red',
      icon: 'mail'
    }, users: {
      enabled: true,
      color: 'green',
      icon: 'person'
    } 
  }   
}; 

如果数据确实发生了变化,请res.locals改用。存储在那里的任何数据也可用于任何模板,但仅在单个请求的生命周期内。任何中间件也可以访问它(并在必要时更改它)。

于 2013-11-30T12:40:33.590 回答
0

这样做的快速方法是将它们设置为 on res。大概你有一个Widget1中间件。这将设置res.widget1.options然后调用next(). 然后将设置另一个中间件res.widget2.options,依此类推。

于 2013-11-30T10:07:03.633 回答