11

Express/Jade のビュー キャッシュで面白いことが起きています。コントローラーは、Mongoose を介して MongoDB から記事を取得し、それを res.render 関数に渡します。ただし、数分間実行した後、Express はそのルートへのすべてのリクエストに対して同じコンパイル済みテンプレートの提供を開始します。これは、さまざまなテンプレートで使用される共有 .jade インクルードでも発生します。

データベースは正しい記事を取得しており、ランダムな文字列をテンプレートに渡しても問題ありません。常に同じ出力が得られます。

これはコントローラー関数です。

exports.show = function(req, res) {
  var articleId;
  articleId = req.params.id;
  Article.findOne({
    _id: articleId
  }).populate('author').exec(function(err, article) {
    if (err) {
      console.log(err);
    } else {
      res.render('articles/show', {
        article: article,
        articleId: article.id
      });
    }
  });
};

そして、それがルートです:

app.get('/articles/:id', articles.show);

本番モードでも開発モードでも同じことが起こります。

Express/Jade でこの種の問題に遭遇した人はいますか?

4

2 に答える 2

2

TL;DR: やってみる

let articleId;

それ以外の

var articleId;

私は Node.js の初心者ですが、「let」を「var」キーワードに置き換えることで同じ問題を解決しました。問題は、「var」が関数によってスコープされた変数を作成するのに対し、「let」は現在のブロックにスコープされた変数を作成することです。ブロックが実行されるたびに再作成されますが、これは Node.js の非同期性のために重要です。

于 2017-01-03T00:22:47.607 に答える