2017-05-29 82 views
0

我嘗試發送多個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

回答

0

變量post_req具有全局範圍。含義post_req的值可以在async.each函數之外訪問和修改。

解決方法是在post_req之前添加一個var,這會將變量範圍限制爲異步,並且還爲每次迭代生成一個新變量。