我正在使用 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 专家的审核才能批准或更正。
应用程序.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;
这是节省内存(泄漏)的最佳方法吗?