异步每对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请求,所有三个请求包含相同的数据

+0

'所有三个请求包含相同的数据' - 哪些数据是? DATA1? DATA2? DATA3?别的东西? –

+0

顺便说一下,是'var put_data' ...'async.each(post_data'是错误的一个错字?或者是你的实际代码? –

+0

@JaromandaX这是一个错字,有一次它会是data1,next时间会变成data3 – frodo

变量post_req具有全局范围。含义post_req的值可以在async.each函数之外访问和修改。

解决方法是在post_req之前添加一个var,这会将变量范围限制为异步,并且还为每次迭代生成一个新变量。