2

node.js アプリケーションで Web ページを提供するために Express を使用しています。

応答オブジェクトのメソッドfooによってレンダリングされるすべてのビューで変数を使用できるようにしたいとしましょう。renderこのタスクの動的ヘルパーを定義できることはわかっています。ただし、次のようにヘルパー変数を非同期に設定する必要がある場合は、それらが不適切であることがわかりました (Mongoose の例)。

Thing.count(filter, function(error, thingCount) {
    foo = thingCount;
}

私は完全に私に合った接続ミドルウェアアプローチを使用してみましたが、ここでの問題は応答コンテキストにどのように影響するかです。renderのメソッド定義を調べるexpress/lib/view.jsと、app._locals オブジェクトに書き込むことで操作できることがわかりました。

function putFooIntoContext (req, res, next) {
  Thing.count(filter, function(error, thingCount) {
    res.app._locals.foo = thingCount;
    next();
  }
}

意図したとおりに機能しますが、そのような単純なアプローチが最善の解決策ではないことを少し心配しています. Express開発者によって設計された適切な方法でリクエスト/レスポンスオブジェクトのみとやり取りすることで、レスポンスコンテキストに影響を与える方法を教えてもらえますか?

4

1 に答える 1

0

Express 3.x では、非同期ヘルパーを「app.use」の形式で利用できます。したがって、単純なグローバル 'foo' 変数の場合、コードは次のようになります。

app.use(req, res, next) {
    Thing.count(filter, function(error, thingCount) {
        res.locals.foo = thingCount;
        next();
    });
}

もちろん、ミドルウェア オプションも有効です。これは単なる別の観点であり、各 app.get(...) ごとにミドルウェアを挿入する手間を省きます。

于 2012-09-05T13:13:51.053 に答える