23

個々のリクエスト中にのみ利用可能にする必要があるデータの場合、どこに保存する必要がありますか? req オブジェクトと res オブジェクトに新しいプロパティを作成しているので、そのデータを関数から関数に渡す必要はありません。

req.myNewValue = 'just for this request'

プロセスオブジェクトはオプションですか? それとも、すべてのリクエストでグローバルに共有されていますか?

4

4 に答える 4

32

Express 4 でのベスト プラクティスは、リクエスト レベルの変数をres.localsに格納することです。

リクエストをスコープとするレスポンス ローカル変数を含むオブジェクト。したがって、そのリクエスト / レスポンス サイクル中にレンダリングされたビュー (存在する場合) でのみ使用できます。それ以外の場合、このプロパティは app.locals と同じです。

このプロパティは、リクエスト パス名、認証済みユーザー、ユーザー設定などのリクエスト レベルの情報を公開する場合に役立ちます。

app.use(function(req, res, next){
  res.locals.user = req.user;
  res.locals.authenticated = ! req.user.anonymous;
  next();
});

オブジェクトはすべてのprocessリクエストで共有されるため、リクエストごとに使用しないでください。

于 2017-01-06T20:10:11.837 に答える
21

次のように渡された変数について話している場合:

http.createServer(function (req, res) {
    req.myNewValue = 'just for this request';
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World\n');
}).listen(1337, '127.0.0.1');

その後、あなたがしていることは完全に問題ありません。req要求データを保存するので、必要に応じて変更できます。Express などのフレームワークを使用している場合も問題ありません (reqオブジェクトの組み込みプロパティを上書きする可能性があることに注意してください)。

「プロセスオブジェクト」によってグローバル変数を参照している場合はprocess、絶対にそうではありません。ここのデータはグローバルであり、まったく変更しないでください。

于 2012-06-11T15:54:48.503 に答える