在Nodejs中使用setInterval()发出post请求

时间:2012-08-03 01:06:52

标签: node.js

所以我想每5秒调用一次Web服务(通过POST请求)。但是,当我运行下面的代码时,它只会提取一次数据,并且不会再次调用请求。知道什么是错的吗?

var http = require('http');
var querystring = require('querystring');
var url = require('url')

/*
* web service info
*/
var postData = querystring.stringify({  
    'index' : '-1',
    'status' : '-1',
    'format' :'-1',
}); 


var options = {
    host: 'localhost',
    path: '/WebApp/WebService.asmx/WebMethod',
    method: 'POST',
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded',  
        'Content-Length': postData.length 
    }
};

/*
* Web Service Request Obj
*/
var webServiceReq = http.request(options, function(res) {  

  res.setEncoding('utf8');  

  res.on('data', function (chunk) {  
    console.log('Response: ' + chunk + '\n');  
  });  

});  

var getData= function(){
    webServiceReq.write(postData);
}

// grab the info every 5 seconds
setInterval(getData, 5000);

1 个答案:

答案 0 :(得分:2)

两个问题:您永远不会通过调用end()来完成请求,并且您尝试多次重复使用相同的请求对象。您需要将请求对象的创建移至getData,并且需要在调用end()后添加对write()的调用。

你可能会发现mikeal的request库很有用,因为它会处理这样的细节。