【问题标题】:express+jade: provided local variable is undefined in view (node.js + express + jade)express+jade:提供的局部变量在视图中未定义(node.js + express + jam)
【发布时间】:2011-01-06 02:49:15
【问题描述】:

我正在使用 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'

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

【问题讨论】:

  • 在这里工作正常(Node 3.4,Jade 0.6,Express 0.7.2),你能提供更多信息吗?例如。您的版本以及 layout.jade。
  • 谢谢 - 修复了它。在一些安装混乱期间,我最终在 ~/.node_libraries 下找到了一个过时的 express 目录。删除它并运行“npm install express”来安装最新的解决了这个问题。
  • 对于 StackOverflow,我该怎么办?删除问题?它对其他人来说并不是非常有效,因为它只是一个版本的东西。而且我无法将您的评论标记为正确答案。
  • 保持原样,网站上有更糟糕的问题应该删除,例如最近的一个:stackoverflow.com/questions/4612706/…

标签: node.js pug express


【解决方案1】:
app.set ('view engine', 'jade');

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

你可以这样做。

【讨论】:

    【解决方案2】:

    您可以使用#{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
    

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2012-04-29
        • 2015-11-23
        • 2011-08-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多