使用nodejs中的请求包在post请求中设置超时

时间:2016-11-03 07:13:49

标签: javascript node.js request timeout

我正在使用请求包发布帖子请求。如何在请求时设置超时500毫秒。

var request = require('request');

request({
      url: 'myUrl',
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'authToken': 'myToken'
      },
      timeout: 500,
      json: infoObj
    })
      .on('response', function(response) {
        console.log('request response=============',response.statusCode)

      })
      .on('error', function(err) {
          console.log('error===',err);
      });

尝试使用超时时:500,上面的例子有错误

  

{错误:ETIMEDOUT       在Timeout._onTimeout(F:\ gomean \ globeone \ node_modules \ request \ request.js:796:17)       在tryOnTimeout(timers.js:224:11)       在Timer.listOnTimeout(timers.js:198:5)代码:' ETIMEDOUT',connect:true}

2 个答案:

答案 0 :(得分:0)

申请文件: timeout - 整数,包含在中止请求之前等待服务器发送响应头(并启动响应主体)的毫秒数。

var request = require('request');

request({
      url: 'myUrl',
      method: 'POST',

      timeout: 500,

      headers: {
        'Content-Type': 'application/json',
        'authToken': 'myToken'
      },
      json: infoObj
    })
      .on('response', function(response) {
        console.log('request response=============',response.statusCode)

      })

答案 1 :(得分:-1)

您需要包含一个回调来捕获错误。来自the documentation

  

您可以通过检查err.code的“ETIMEDOUT”值来检测超时错误。此外,您可以通过检查err.connect属性是否设置为true来检测超时是否为连接超时。

一个例子:

request.get('http://10.255.255.1', {timeout: 1500}, function(err) {
    console.log(err.code === 'ETIMEDOUT');
    // Set to `true` if the timeout was a connection timeout, `false` or
    // `undefined` otherwise.
    console.log(err.connect === true);
    process.exit(0);
});