在express.js中的每个请求上设置全局res.local变量

时间:2012-08-25 01:12:26

标签: javascript node.js coffeescript express pug

基本上我想构建一个站点范围的导航栏,其中包含express.js中局部变量中指定的链接

所以我构建了我想要包含在页面中的链接列表:

class NavigationLink
  constructor: (@title,@url) ->

app.use (req,res,next) ->
  res.locals.navigationLinks = [
    new NavigationLink "About", "/about"
    new NavigationLink "Projects", "/projects"
    new NavigationLink "Skills", "/skills"
    new NavigationLink "Contact", "/contact"
  ]
  next()

然后,如果我点击主页:

app.get '/', (req,res) ->
  res.render('about')

Jade尝试渲染这个布局文件,该文件应该遍历navigationLinks数组并为每个文件渲染:

!!! 5
html
include header
body
    .container
        .row
            .span3
                ul.nav.nav-tabs.nav-stacked
                    for navigationLink in navigationLinks
                        include navigationLink
            .span9
                block content

但是我收到参考错误' navigationLinks未定义'我认为这意味着当地人没有通过。会喜欢关于如何解决问题的建议,或者更适合这种事情的另一种设计范例(在网站的每个页面上动态构建链接)。谢谢!

1 个答案:

答案 0 :(得分:3)

Jonathan Ong是对的。上面的代码应该以默认的中间件顺序运行,该顺序将在app.use中间件之前运行所有app.router中间件。因此,我同意您的代码中的其他地方您可能在代码段中的app.use app.router之前有一行app.use