19

Express.js をバージョン 2 から 3 に更新しapp.dynamicHelpers({..})、V3 には存在しないため、次の呼び出しが壊れました。

app.dynamicHelpers({

    request: function(req){
      return req
    },
    ...etc.
});

これを言う移行ガイドがあります:

  • app.dynamicHelpers()(ミドルウェア + res.locals を使用)

しかし、私はそれを行う方法に困惑しています。それを移行する方法のより具体的な例はありますか?

関連する SO 投稿: nodejs Express 3.0

4

4 に答える 4

28

私はsession.userで同じ問題を抱えていましたが、app.use関数は以前の場所ではなく、configure部分にある必要があることを理解して修正しまし

前:

app.configure();
app.dynamicHelpers({
  user: function(req, res) {
    return req.session.user;
  }
});

後:

app.configure(function(){
  //...
  app.use(function(req, res, next){
    res.locals.user = req.session.user;
    next();
  });
  //...
});

Flashの場合はconnect-flashをご覧ください

于 2012-07-26T20:02:51.163 に答える
3

githubのexamplesフォルダーを見てください。例: auth

app.use(function(req, res, next){
  var err = req.session.error,
      msg = req.session.success;
  delete req.session.error;
  delete req.session.success;
  res.locals.message = '';
  if (err) res.locals.message = '<p class="msg error">' + err + '</p>';
  if (msg) res.locals.message = '<p class="msg success">' + msg + '</p>';
  next();
});

その後、テンプレートで変数「メッセージ」を使用できます。

于 2012-07-20T15:59:53.307 に答える
3

reponse.locals.use は Express の新しい便利な機能で、最初に評価する必要がある変数をモデルに送信できます。たとえば、ビューに 3 つの変数を送信したいとします。これらはすべて、mongodb へのリクエストの後に送信する必要があります。「古い」方法では、3 つのコールバックをネストし、最後のコールバックが返されたときにビューをレンダリングしていました。locals.use を使用すると、関数が評価され、すべてが評価された場合にのみビューがレンダリングされるため、これが非常に簡単になります。

それらの使用方法に関するコードの短いスニペットを次に示します (これはコーヒー スクリプトです。うまくいけば、javascript に変換できます:D)

response.locals.use (request, response, done) ->
    myAsynchMethod (value) ->
        reponse.locals.myProperty = value
        done()

この場合、ビューで使用できる myProperty という名前の変数があり、その値は myAsynchMethod がコールバックに与えたものに設定されます。

于 2012-07-20T17:03:18.210 に答える