express+jade:在视图中提供的本地变量未定义(node.js + express + jade)

6

我正在使用node.js和express实现一个webapp,使用jade模板引擎。

模板可以正常渲染,并且可以访问helpers和dynamic helpers,但是无法访问除"body"局部变量之外的其他局部变量,该变量由express提供并在我的layout.jade中可用和定义。

以下是一些代码:

app.set ('view engine', 'jade');

app.get ("/test", function (req, res) {  
    res.render ('test', {
        locals: { name: "jake" }
    });
});

这是 test.jade 文件:

p hello
=name

当我删除第二行(引用名称)时,模板可以正确渲染,在网页上显示“hello”字样。但是当我包含了=name时,它会抛出一个ReferenceError错误:

500 ReferenceError: Jade:2 NaN. 'p hello' NaN. '=name' name is not defined
NaN. 'p hello'
NaN. '=name'

我相信我在本地变量方面完全按照jade和express的示例进行了跟随。我是否做错了什么,或者这可能是express或jade中的一个bug?


1
这里可以正常工作(Node 3.4,Jade 0.6,Express 0.7.2),你能提供更多信息吗?例如,你的版本以及layout.jade文件。 - Ivo Wetzel
谢谢,问题已经解决。在安装时出现了一些混淆,导致我 ~/.node_libraries 下有一个过时的 express 目录。删除它并运行 "npm install express" 安装最新版本解决了问题。 - Jake
关于StackOverflow,我该怎么办?删除这个问题吗?这对其他人来说并不是非常有效,因为它只是一个版本问题。而且我也不能将你的评论标记为正确答案。 - Jake
1
只需将其保留,该网站上有更糟糕的问题应该被删除,例如最近的这个问题:http://stackoverflow.com/questions/4612706/capitalizaing-a-string-in-javascript - Ivo Wetzel
3个回答

6
app.set ('view engine', 'jade');

app.get ("/test", function (req, res) {  
    res.render ('test', {
        name: "jake"
    });
});

你可以像这样操作。


3

你可以使用#{variable-name}代替=。下面是一个我正在使用的例子:这将呈现一个页面,其中包含导航菜单。每次加载页面时传递页面标题,当然,你需要为每个页面创建一个app.get函数。

App.js

var navigation = {
  home : {
    uri : "/",
    url : "index",
    title : "Home"
  },
  lab : {
    uri : "/lab",
    url : "lab",
    title : "Lab"
  },
  profile : {
    uri : "/profile",
    url : "profile",
    title : "Profile"
  },
  timetable : {
    uri : "/timetable",
    url : "timetable",
    title : "Timetable"
  }
}

app.get(navigation.profile.uri, function(req, res){ //Profile
  res.render(navigation.profile.url, {
    title: navigation.profile.title,
    navigation: navigation
  });
});

profile.jade

section#page-content
  h1#page-title #{title}
  p Welcome to #{title}

layout.jade

!!! 5
html
  head
    title= title
    link(rel='stylesheet', href='/stylesheets/reset.css')
    link(rel='stylesheet', href='/stylesheets/style.css')
  body
    header#site-header
      nav#site-navigation
        != partial("partials/navigation")
    section!= body
  footer#page-footer

2

我认为错误有时是由浏览器请求favicon.ico引起的。

尝试将以下行添加到layout.jade头部以链接图标

link(rel='icon', href='/images/siteicon.png')

这解决了我遇到的相同错误。

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