私はSamsの「Node.js in 24 Hours」に取り組んでいます。チャプター 8 が難しさを感じています (1 時間以上)。例 07 では、プログラマーは、ユーザーが MongoDb に格納されるタスク リストを作成できるページを作成できます。コードは Express と Jade を使用しています。指示に従ってすべてが機能します...「タイトル」がレンダリングされていないことに気づき、代わりに一般的なタイトル、ルートのディレクトリパスを取得することを除いて。私の質問はなぜですか?私は res.render を正しく使用していると思います.Jadeのインデックス/レイアウトファイルは著者のものと一致しています( https://github.com/shapeshed/nodejsbook.ioをチェック)。
更新: layout.jade が無視されているように見えたので、削除しました。エラーは発生せず、問題は残ります。なぜ/どのようにlayout.jadeを無視できますか?
** 結論 **: 「Node.js in 24 Hrs」は Express 2 を前提としています。ただし、本のインストール手順に従うと Express 3 がインストールされるため、問題が発生します (以下の解決策)。この本の第 8 章では、Node.js/Mongodb/Jade/Flash の結合が紹介されていることに注意してください。Jade の最も簡単な紹介 (第 6 章) のみがあり、Flash はまったく紹介されていません。十分な経験を積んだフロントエンド開発者でない限り、1 時間以上かかります。
ディレクトリ構造は次のとおりです。
\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!