异步每对HTTP PUT
问题描述:
我尝试发送多个HTTP PUT请求到我的服务器,但我只管理一个JSON发送到数据库,我是缺少在这里异步每对HTTP PUT
var data1 = JSON.stringify(require('./abc.json')),
data2 = JSON.stringify(require('./abe.json')),
data3 = JSON.stringify(require('./abd.json'));
var put_data = [data1,data2,data3];
async.each(put_data, function(data, callback){
var post_options = {
hostname: config.serviceHost,
port : '80',
path : '/API/Nag',
method : 'PUT',
headers : {
'Content-Type': 'application/json',
'Authorization': config.secret
}
};
post_req = http.request(post_options, function (res) {
console.log('STATUS: ' + res.statusCode);
console.log('HEADERS: ' + JSON.stringify(res.headers));
res.setEncoding('utf8');
res.on('data', function (chunk) {
console.log('Response: ', chunk);
});
res.on('end', function() {
callback();
});
});
post_req.on('error', function(e) {
console.log('problem with request: ' + e.message);
});
post_req.write(data); //posting data
post_req.end();
}, function(err){
console.log('All requests done!')
});
即使寿它发送3 HTTP请求,所有三个请求包含相同的数据
答
变量post_req
具有全局范围。含义post_req
的值可以在async.each
函数之外访问和修改。
解决方法是在post_req
之前添加一个var
,这会将变量范围限制为异步,并且还为每次迭代生成一个新变量。
'所有三个请求包含相同的数据' - 哪些数据是? DATA1? DATA2? DATA3?别的东西? –
顺便说一下,是'var put_data' ...'async.each(post_data'是错误的一个错字?或者是你的实际代码? –
@JaromandaX这是一个错字,有一次它会是data1,next时间会变成data3 – frodo