18

次のそれぞれをいつ使用するのが最適かを理解しようとしています。これが私の基本的な理解です:

app.locals-アプリレベルでグローバル変数を保存するのに適しています。すべてのユーザー/セッションには、これらの変数に同じ値が表示されます。変数はすべてのビューで使用できます。

res.locals-特定の要求/応答サイクルの変数を格納するのに適しています。変数は、応答に関連付けられたビューでのみ使用できます。

req.session-一意のユーザーセッションに関連付けられた変数(ユーザー名など)を格納するのに適しています。これらの変数は、一意のユーザー/セッションのすべてのビューで使用できる必要があります。

私が持っている特定のユースケースは次のとおりです。ユーザーがmongodbからデータを取得するクエリを実行します。ここで、このクエリの結果であるJSON配列を、すべてのビュー(HTTPリクエスト)で変数として使用できるようにします。各ビューがアクセスできるように結果配列を「保存」するための最良の方法は何ですか?

4

1 に答える 1

4

ここで、このクエリの結果であるjson配列を、すべてのビューの変数として使用できるようにします。各ビューがアクセスできるように結果配列を「保存」するための最良の方法は何ですか?

「すべてのビューで利用可能」と言うときは、すべてのHTTPリクエストを意味していると思います。その場合は、HTTPがステートレスプロトコルであり、これを提供しないことに注意する必要があります。このための独自のメカニズムを開発する必要があります。

これを行う1つの方法は、この情報(配列)をサーバーにキャッシュし、リクエストごとに取得することです(たとえば、MongoDBからではなくメモリから取得します)。セッションIDをCookieに保存し、このIDに基づいて、別のリクエストが発生したときにキャッシュから取得します。情報をメモリに保存するために選択できるいくつかのキャッシュツール(redis、memcachedなど)が利用可能です。

この情報(配列自体)をCookie化することもできます。その場合、HTTPリクエストごとにクライアントとサーバー間で送受信されるため、データが非常に小さい場合を除いて、あまり良い考えではない可能性があります。

于 2013-03-08T15:06:28.297 に答える