Nodejs / Express - 'title'不呈现

时间:2013-06-19 20:43:59

标签: javascript node.js express pug

我正在通过Sams“Node.js 24小时”工作。第8章给了我困难(超过一个小时)!示例07允许程序员创建一个页面,用户可以创建一个存储在MongoDb中的任务列表。该代码使用Express和Jade。按照说明一切正常......除了我注意到'标题'没有渲染,而是我得到一个通用标题,路线的目录路径。我的问题是为什么?我认为我正在使用res.render,Jade索引/布局文件与作者一致(选中https://github.com/shapeshed/nodejsbook.io)。

更新:由于看起来layout.jade被忽略了,我删除了它。没有出现错误,问题仍然存在。为什么/怎么可以忽略layout.jade?

**结论**:'24小时内的Node.js'假设Express 2.按照本书的安装说明安装Express 3,因此存在困难(下面的补救措施)。请注意,本书的第8章介绍了仅在Jade(第6章)最简单的介绍之后耦合Node.js / Mongodb / Jade / Flash,而根本不介绍Flash。除非你已经是一位经验丰富的前端开发人员,否则需要一个多小时。

目录结构是:

\connect_to_mongo
 |
 |-  \node_modules
 |-  \public
 |-  \routes
 |-  \views
 |    |- \tasks
 |    |    |- index.jade
 |    |    |- new.jade
 |    |- index.jade
 |    |- layout.jade
 |- app.js
 |- package.json

app.js包含:

app.get('/tasks/new', function(req,res) {
    Task.find({}, function(err,docs) {
        res.render('tasks/new.jade', {
            title:'New Tasks'
        });
    });
});

layout.jade是:

!!!
html
  head
    title #{title}
    link(rel='stylesheet', href='http://twitter.github.com/bootstrap/1.4.0/bootstrap.min.css')
  body
    section.container!= body

tasks / index.jade是:

h1 Your tasks
p
  a(href='/tasks/new', class='btn primary') Add a Task

- if(docs.length)
  table
    tr
      th Task
        each task in docs
          tr
            td #{task.task}
- else
  p You don't have any tasks!

2 个答案:

答案 0 :(得分:4)

删除=

应该是

title #{title}

答案 1 :(得分:2)

在Express 3(您可能正在使用)中已经弃用了布局。

相反,您需要使用template inheritance

// layout.jade
...
section.container
  block body
// tasks/index.jade
extends ../layout

block body
  h1 Your tasks
  ...

或者,您可以安装Express 2而不是Express 3,因为如果您的图书采用版本2,您可能会遇到其他问题:

npm install express@2.5.11