6

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

模板渲染得很好,可以访问助手和动态助手,但不能访问除“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'

我相信我正在遵循玉石并就局部变量准确地表达示例。我做错了什么,或者这可能是快递或玉石的错误?

4

3 回答 3

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

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

你可以这样做。

于 2011-01-21T01:00:36.637 回答
3

您可以使用#{variable-name} 而不是=。这是我如何使用它的示例: 这将呈现一个页面,并带有一个导航菜单。在每次加载页面时传递页面标题,当然您需要为每个页面创建一个 app.get 函数。

应用程序.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
  });
});

个人资料.jade

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

布局.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
于 2011-09-13T13:38:39.320 回答
2

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

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

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

这消除了我得到的相同错误

于 2012-01-30T10:53:28.957 回答