Node.js Javascript作用域问题
Node.js Javascript Scope Issue
我有一个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;
}
}
"router"处理请求(向下传递请求并处理对客户端的响应):
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);
});
}
}
}
"handler"模块/函数运行回调函数并将响应(代码、头和数据)传递给它。回调函数然后将头文件与配置文件中设置的一组默认头文件合并。
THE ISSUE:当有两个连接同时调用help.joinObjects()
时(这是我的猜测),response.headers
属性与另一个用户/连接发生冲突并返回坏数据。如果我注释掉进行合并的行,则不会发生这种情况。
问题:我对"帮助"模块的方法有什么问题?这里有一些范围问题,我不明白。
正如lazyhammer所指出的,问题在于我将对象传递给辅助函数的顺序:help.joinObjects(config.responseHeaders, response.headers)
.
Javascript通过引用传递变量,因此每次调用help.joinObjects()
时,它都会覆盖config属性而不是用户特定的对象。
相关文章:
- AngularJS$作用域在选项卡集中出现问题
- 作用域问题-此函数是否形成闭包-JavaScript
- 访问Javascript对象-Node.js的作用域问题
- 尝试将变量传递到对象中时的作用域问题'的方法构造函数
- “this”和内部作用域命名函数的打字稿问题
- 'simple'套接字中的作用域问题.IO服务器
- 我对按钮的作用域有问题'的听众
- Javascript作用域问题,对象在分配后没有数据
- 在DOM(html)上下文中使用角度作用域函数时出现的问题
- 可能存在Javascript作用域问题
- 本地Javascript作用域问题
- 设置Javascript函数的作用域问题
- AngularJS:图片上传+文件阅读器预览.控制器、指令和作用域之间的绑定出现问题
- 作用域和将参数传递给动态创建的事件处理程序时出现问题
- 达到 10 次摘要迭代,中止(作用域函数问题)
- Javascript 中使用 setTimeout 的作用域问题
- 作用域问题反应父子方法ES6
- jquery get中的作用域问题
- 当输入具有带作用域的指令时,Angularjs绑定会出现问题
- 绑定时出现Javascript作用域问题