我有一个 Node.js HTTP 服务器正在运行,如下所示(简化):
http = require('http');
help = require('./modules/help').run;
router = require('./modules/router').run;
m = {something: require('./modules/something')};
var server = http.createServer(router).listen(8001);
"help" 是一组函数助手,例如:
module.exports.run = {
joinObjects: function(obj1, obj2) {
for (var prop in obj2) {
obj1[prop] = obj2[prop];
}
return obj1;
}
}
“路由器”处理请求(进一步向下传递并处理对客户端的响应):
module.exports.run = function(req, res) {
var urlPath = url.parse(req.url).pathname;
switch(urlPath) {
case '/something':
requestHandler(req, res, 'something');
break;
...
}
function requestHandler(req, res, handler) {
var data = '';
req.on('data', function(chunk) {
data += chunk;
}
req.on('end', function() {
m[handler].run(req, data, function(response) {
response.headers = help.joinObjects(config.responseHeaders, response.headers);
res.writeHead(response.code, response.headers);
res.end(response.data);
});
}
}
}
“处理程序”模块/函数运行回调函数并将响应(代码、标头和数据)传递给它。然后,回调函数将标头与配置文件中设置的一组默认标头合并。
问题:当有两个连接help.joinObjects()
同时调用时(这是我的猜测),response.headers
属性与另一个用户/连接中的一个发生冲突并返回错误数据。如果我注释掉进行合并的行,则不会发生这种情况。
问题:我对“帮助”模块的方法有什么问题?这里有一些我不明白的范围问题。