1

nodejsのドキュメントには

モジュールは、最初にロードされた後にキャッシュされます。これは、(とりわけ)require('foo')を呼び出すたびに、同じファイルに解決される場合、まったく同じオブジェクトが返されることを意味します。

ただし、スコープは指定されていません。ロードされたモジュールは、現在のHTTPリクエストまたは複数のHTTPリクエストでrequire('module')を複数回呼び出すためにキャッシュされますか?

4

2 に答える 2

3

はい、そうです。

PHP などの他の一般的なサーバー環境とは異なり、node.js サーバーは要求が完了した後にシャットダウンしません。

優れたExpressフレームワークを使用しているとします。次の例が違いを理解するのに役立つかもしれません。

... // setup your server

// do a route, that will show a call-counter
var callCount = {};

app.get('/hello/:name', function(request, response) {
  var name = request.params.name;
  callCount[name] = (callCount[name] || 0) + 1

  response.send(
    "Hello " + name + ", you invoked this " + callCount[name] + " times");
  });
});

電話curl localhost:3000/hello/Daveをかけると、その後のすべての電話でより高い番号が表示されます。

最初の呼び出し:Hello Dave, you invoked this 1 times

2 回目の呼び出し:Hello Dave, you invoked this 2 times

... 等々 ...

そのcallCountため、そのルートへのリクエストによって変更されます。それがどこから来たかは問題ではなく、あなたがしているどのモジュールでも定義することができますrequire

とにかく、モジュールで定義されたこれらの変数は、サーバーの再起動時にリセットされます。Redisストア ( node-redisを参照)、ファイル システム上のファイル、MongoDBなどのデータベースなど、node.js プロセスから分離されたストアにそれらを配置することで、これに対抗できます。最終的にはあなた次第です。データがどこから来てどこへ行くのかを認識する必要があるだけです。

それが役立つことを願っています。

于 2013-02-28T09:16:26.330 に答える