[解決済み] Expressミドルウェアにおけるreq.locals vs. res.locals vs. res.data vs. req.data vs. app.localsについて
質問
似たような質問がいくつかありますが、私の質問は、異なるルーティングミドルウェアに沿って取得した中間結果を伝播させたい場合、最善の方法は何でしょうか?
app.use(f1); app.use(f2); app.use(f3);
function f1(req,res,next) {
//some database queries are executed and I get results, say x1
res.locals.dbResults = {...};
next();
}
function f2(req,res,next) {
// more processing based upon req.locals.dbResults
res.locals.moreResults = {....};
next();
}
// ...
を使えば、異なるミドルウェアを経由して同じようにデータを伝搬させることができると思います。 req .localsを使用することです。また、リクエストオブジェクトとレスポンスオブジェクトの両方が、リクエストの開始時に locals プロパティを空のオブジェクトに初期化しているように見えます。
また、res.mydataやreq.mydataのプロパティも設定できるのですね。
理論的には、app.locals は、ミドルウェア間で持続するので、異なるミドルウェアを通してこのデータを渡すために使用することもできますが、それは app.locals の従来の使用法に反しています。app.localsは、どちらかというとアプリケーション固有のデータとして使われます。また、次のリクエストで同じ変数を使用できるように、リクエストとレスポンスのサイクルが終了した時点でそのデータをクリアする必要があります。
ミドルウェアを通して中間結果を伝搬するための最適かつ標準的な方法は何ですか?
どのように解決するのですか?
ご指摘のように、両方の
req.locals
,
res.locals
または、独自の定義キー
res.userData
を使用することができます。しかし、Express でビューエンジンを使用する場合、中間データを
res.locals
に中間データを設定することができ、そのデータはビューで利用可能になります (
この記事
). ミドルウェア内の中間データを
req.locals
のビューデータを上書きしないようにするためです。
res.locals
でのビューデータの上書きを避けることができます。
res.locals リクエストにスコープされたレスポンスのローカル変数を含むオブジェクトで、そのリクエスト/レスポンスサイクル中にレンダリングされたビュー(もしあれば)のみが利用可能です。 そのため、そのリクエスト/レスポンスサイクルの間にレンダリングされたビュー(もしあれば)でのみ利用可能です。そうでなければ、この プロパティと同じです。
app.locals
.このプロパティは、次のようなリクエストレベルの情報を公開するのに便利です。 リクエストパス名、認証されたユーザー、ユーザー設定など、リクエストレベルの情報を公開するのに便利です。
関連
-
[解決済み】ExpressJSとMeteorJSの比較【終了しました
-
[解決済み】ENOENT, そのようなファイルまたはディレクトリがありません。
-
[解決済み】MongoDBのデータ/DBが見つからない
-
[解決済み】Mongooseで配列の値を更新する方法
-
[解決済み] MongoDB でコレクションを日付順に並べるには?
-
[解決済み] エラーです。Expressでビューの検索に失敗しました
-
[解決済み] ノードマータ予期せぬフィールド
-
[解決済み] Node.jsのConnect、Express、「ミドルウェア」って何?
-
[解決済み] Expressで"? "の後にあるGETパラメータにアクセスするにはどうすればよいですか?
-
[解決済み】Expressで完全なURLを取得する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] エラー: nodejs の get 呼び出しで getaddrinfo ENOTFOUND が発生しました。
-
[解決済み】npx コマンドが見つかりません。
-
[解決済み】passport.js passport.initialize() ミドルウェアが使用されていません。
-
[解決済み】MongooseでEnumを作成し使用する方法
-
[解決済み】npm 5で作成されたpackage-lock.jsonファイルはコミットするのでしょうか?
-
[解決済み] AWS lambda function error - Unable to import module 'index': エラー
-
[解決済み] nvm は npm config の "prefix" オプションと互換性がありません。
-
[解決済み] NodeJsのSequelizeでautoIncrementはどのように動作するのですか?
-
[解決済み] node.js - リクエスト - "emitter.setMaxListeners() "はどのように?
-
[解決済み] DynamoDBで一括削除するにはどうしたらいいですか?