在节点中,我看到在模块中初始化的全局变量在请求之间变得混杂[一个请求所做的更改会影响另一个请求]。例如:
一个.js
var a;
function printName(req, res) {
//get param `name` from url;
a = name;
res.end('Hi '+a);
}
module.exports.printName = printName;
index.js
//Assume all createServer stuffs are done and following function as a CB to createServer
function requestListener(req, res) {
var a = require('a');
a.printName(req, res);
}
根据我的假设,每次新请求到达节点时都会执行从模块“a”导出的 printName 函数,并且每次都会有不同的范围对象。
因此,在模块中包含全局内容不会影响它们的请求。
但我发现情况并非如此。谁能解释节点如何以特定的方式处理函数的模块导出[它处理缓存模块导出对象的范围],以及如何克服模块内请求之间的共享全局变量?
编辑 [We do async task per request]:在我们的实时系统中快速请求。基本上查询redis并响应请求。我们看到错误的响应映射到错误的请求(redis 的回复 [存储在模块中的全局变量中] 查找错误地映射到 diff req)。我们还有一些默认值作为全局变量,可以根据请求参数覆盖。这也搞砸了