2013-06-19 3 views
1

Я работаю через Sams «Node.js за 24 часа». Глава 8 дает мне трудности (более часа)! Пример 07 позволяет программисту создать страницу, посредством которой пользователь может создать список задач, который хранится в MongoDb. Код использует Express и Jade. Следуя инструкциям, все работает ... за исключением того, что я заметил, что «title» не является рендерингом, и вместо этого я получаю общий заголовок, путь к каталогу маршрута. Почему мой вопрос? Я думаю, что я правильно использую res.render, файлы индекса/макета Jade согласуются с авторами (отмечены https://github.com/shapeshed/nodejsbook.io).Nodejs/Express - 'title' не отображается

Обновление: так как это было похоже на layout.jade, я удалил его. Ошибка не возникла, и проблема остается. Почему/как можно было игнорировать layout.jade?

** Заключение **: «Node.js за 24 часа» предполагает экспресс 2. В соответствии с инструкциями по установке книги Express 3, следовательно, существуют трудности (средство защиты ниже). Обратите внимание на то, что в главе 8 этой книги описывается связь Node.js/Mongodb/Jade/Flash после простейшего введения в Jade (Chap 6) и вообще не для 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 

задачи/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! 
+0

Обратите внимание на то же поведение для всех последних браузеров: Firefox, Chrome и IE. Вариации присвоения 'title' в 'layout.jade' не влияют. – MikeB

ответ

2

Макеты устарели Экспресс 3 (который вы, вероятно, используете).

Вместо этого вам нужно использовать template inheritance:

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

block body 
    h1 Your tasks 
    ... 

В качестве альтернативы, вы можете установить Express 2 вместо Экспресс 3, так как вы можете столкнуться с другими проблемами, если ваша книга предполагает, версия 2:

npm install [email protected] 
Смежные вопросы