1

私は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!
4

2 に答える 2

4

を取り外します=

そのはず

title #{title}
于 2013-06-19T20:47:02.820 に答える
2

レイアウトは、Express 3 (おそらく使用している) では廃止されました。

代わりに、テンプレートの継承を使用する必要があります:

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

block body
  h1 Your tasks
  ...

別の方法として、Express 3 の代わりに Express 2 をインストールすることもできます。ブックがバージョン 2 を想定している場合、別の問題が発生する可能性があるためです。

npm install express@2.5.11
于 2013-06-20T05:01:37.823 に答える