Node-fetch连接ETIMEDOUT错误

6

我想在响应中得到200状态码,但结果是ETIMEDOUT。我不明白为什么我可以通过postman获取成功的响应,但使用node-fetch时总是响应ETIMEDOUT。下面是代码示例:

const Resource = {
  get: cb => {
    fetch('https://example.com', {
      method: 'POST',
      headers: {'Content-Type': 'application/x-www-form-urlencoded'},
      body: {...some body...},
    }).then(res => {
      if (res.status !== 200) cb(`Status: ${res.status}, ${res.statusText}`)
      return res.text()
    }).then(data => {
        cb(null, data)
      }).catch((err) => {
       console.log('ERROR: ', err)
      })
  }
}

以下是返回结果:

错误:{ FetchError: 请求 https://example.com 失败,原因:连接超时 at ClientRequest.<anonymous> (C:\Users\projects\DSSRQ\node_modules\node-fetch\lib\index.js:1393:11) at emitOne (events.js:116:13) at ClientRequest.emit (events.js:211:7) at TLSSocket.socketErrorListener (_http_client.js:387:9) at emitOne (events.js:116:13) at TLSSocket.emit (events.js:211:7) at emitErrorNT (internal/streams/destroy.js:64:8) at _combinedTickCallback (internal/process/next_tick.js:138:11) at process._tickCallback (internal/process/next_tick.js:180:9) message: '请求 https://example.com 失败,原因:连接超时', type: '系统', errno: 'ETIMEDOUT', code: 'ETIMEDOUT' }


你实际上是使用http还是https协议? - The Oracle
这个已经被 https 覆盖了。 - blindeveloper
你的目标主机使用什么协议?HTTP还是HTTPS? - The Oracle
我的目标主机正在使用https协议。 - blindeveloper
我正在本地的nodejs环境中进行开发。我已经尝试使用cross-fetch库(https://www.npmjs.com/package/cross-fetch)来获取数据,但是却遇到了相同的错误。 - blindeveloper
这个回答解决了你的问题吗?npm无法下载包(连接ETIMEDOUT) - M M
1个回答

4
看起来是因为代理限制造成的。

2
你能再详细解释一下吗? - Ryan Walker
1
是的,当时我工作的公司有代理限制,这是主要问题所在。 在这种情况下,您只需要配置代理配置文件,并输入域名和密码以便能够运行它。 至少这是我的解决方案。 - blindeveloper

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接