将渲染参数传递给下一个路线

时间:2013-11-29 22:23:37

标签: node.js express swig-template

我正在使用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传递到下一条路线。

2 个答案:

答案 0 :(得分: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。存储在那里的任何数据也可用于任何模板,但仅限于单个请求的生命周期内。任何中间件也可以访问它(并在必要时进行更改)。

答案 1 :(得分:0)

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