2

我正在为我的应用程序使用 Express.js,并且在向 adobe 分析 API 发出发布请求时出现错误。

我试图添加server.timeout,但它没有解决它...

这是错误消息:

错误: 在 TLSWrap.onread (net.js:572:26) 处的 exports._errnoException
(util.js:1028:11)处读取 ECONNRESET 代码:'ECONNRESET',errno:'ECONNRESET',系统调用:'read'

这是失败的代码:

  pullClassifications(req) {
    const dfd = q.defer();
    const { username, password, payload } = req;
    const data = wsse({username: username, password: password});
    const wsseHeaders = {'X-WSSE': data.toString({ nonceBase64: true })};
    const options = {
      'method': 'post',
      'headers': wsseHeaders,
      'content-type': 'application/json',
      'body': payload,
      'json': true,
      'url': 'https://api.omniture.com/admin/1.4/rest/?method=ReportSuite.GetClassifications'
    }

    request(options, function(err, response, body) {
      if(response.statusCode == 200) {
        dfd.resolve(body);
      } else {
        dfd.reject({statusCode: response.statusCode, body: body});
      }
    })
    return dfd.promise;
  }

更新:
我尝试使用 Postman 发布相同的请求并且它有效,在 630000 毫秒内返回响应。

这个错误的原因是什么,有什么办法可以解决吗?

4

1 回答 1

0

您是否尝试过timeout在请求中添加选项?当你可以使用原生 Promise 时,为什么还要使用 Q Promise 库?旧的 NodeJs 版本?

https://github.com/request/request#timeouts

    const options = {
      'timeout': 120 * 60 * 1000 //(120 seconds)
      'method': 'post',
      'headers': wsseHeaders,
      'content-type': 'application/json',
      'body': payload,
      'json': true,
      'url': 'https://api.omniture.com/admin/1.4/rest/?method=ReportSuite.GetClassifications'
    }

    request(options, function(err, response, body) {...});
于 2018-04-02T16:07:40.873 回答