Express と Passport for node.js を使用して単純な Web サーバーを構築しています。単純なモジュールをコーディングしてから、モジュールを GET 要求内にロードしました。複数のユーザーが要求にアクセスするまで、すべてがうまく機能します。
「app.get」関数内の「var」は、関数の終了後にメモリから削除されたと信じていましたが、そうではありません。外部モジュール内でいくつかのローカル変数を使用しており、値はユーザー間で共有されています、モジュールは次のようになります。
var some_value=0;
function some_method(){
some_value++;
return some_value;
}
exports.some_method = some_method;
Express リクエスト コードは次のようになります。
app.get('/someurl', function(req, res) {
var some_extermal_module = require('/some_extermal_module'); // <-----Right way?
var data = some_extermal_module.some_method();
res.render('view', {
title : 'Title',
data_to_vew: data
});
});
「app.get」リクエスト内のオブジェクトは、別のユーザーがアクセスしていても、常にメモリ内に留まりますか?
実行後に「var」オブジェクトをきれいにする方法は?
このメモリの競合を回避するにはどうすればよいですか?
モジュールを別の方法でコーディングしたり、別の方法でモジュールを呼び出したりする必要がありますか?
どうもありがとう。
更新:これは適切な解決策だと思いますが、承認または修正のために node.js/Express の専門家のレビューが必要です。
app.js:
var ext_mod = require('./module');
var express = require('express');
var app = express();
app.get('/', function(req, res){
var ex_mod_instance = new ext_mod({});
ex_mod_instance.func_a({},function(ret){
res.send('Hello World: '+ret);
});
ex_mod_instance = null; // clean
});
app.listen(8080);
console.log('Listening on port 8080');
モジュール.js:
var node_module = function(config) {
this.config = config;
this.counter=0;
};
node_module.prototype = {
func_a: function(param,done) {
this.counter++;
done(this.counter);
},
func_b: function(param,done) {
}
};
module.exports = node_module;
これはメモリ (リーク) を節約するための最良の方法ですか?