Nodejs (node:7804) UnhandledPromiseRejectionWarning: Error: connect ETIMEDOUT

发布于 1周前 作者 sinazl 来自 nodejs/Nestjs

Nodejs (node:7804) UnhandledPromiseRejectionWarning: Error: connect ETIMEDOUT

遇到这么个情况,请大神指教 这个接口 https://api.testnet.huobi.pro/v1/common/symbols 在浏览器上可以正常访问返回数据:

但是使用 axios 请求却会报错:

报错信息: C:\Users\Maxzel\Desktop\huobi>node app.js (node:7804) UnhandledPromiseRejectionWarning: Error: connect ETIMEDOUT 174.37.154.236:80 at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1141:16) (node:7804) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag --unhandled-rejections=strict (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 2) (node:7804) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

之后尝试改 headers,将 axios 换成 request,superagent 来请求都无法得到返回数据,但为什么浏览器又可以直接返回呢?应该怎么解决?


8 回复

你发的那个 URL 应该是需要 FQ 的, 你的浏览器估计有开启代理, 所以你浏览器可以打开.

但你用 axios 请求时没有设置代理, 所以请求不到.


我梯子开的全局,axios 走的不是梯子的网吗?

如果走的话, 你的 node 就请求成功了.

#2 全局没用,要设置环境变量才行的

你浏览器写的是 https,node 里面写的是 http

试了下在我这没有问题,考虑在后面添加歌 catch,看下具体的错误原因吧。感觉是网络问题导致的。虽然你写的 http,但是会自动跳转到 https,所以应该和这个没关系。还不行的话,列举下你的环境信息(node/axios veriosn)

Promise 的缺点之一就是内部跑出异常需要外部主动捕获。

针对你提到的 Nodejs (node:7804) UnhandledPromiseRejectionWarning: Error: connect ETIMEDOUT 错误,这通常表示 Node.js 在尝试建立网络连接时超时了。ETIMEDOUT 错误通常发生在请求发送到服务器后,服务器在预定时间内没有响应。以下是一些可能的原因和解决方法:

  1. 网络问题

    • 检查你的网络连接是否稳定。
    • 确认目标服务器是否可达,使用 pingtelnet 命令测试网络连接。
  2. 服务器问题

    • 服务器可能过载或宕机。
    • 检查服务器状态,如果可能,联系服务器管理员。
  3. 代码处理

    • 确保你的 Node.js 代码正确处理了 Promise 拒绝。你可以通过添加 .catch() 方法来捕获错误,例如:
    const fetch = require('node-fetch');
    
    fetch('http://example.com')
      .then(response => response.json())
      .then(data => console.log(data))
      .catch(error => {
        console.error('Error:', error);
      });
    
    • 使用 async/await 时,确保用 try/catch 块包裹异步代码:
    async function fetchData() {
      try {
        const response = await fetch('http://example.com');
        const data = await response.json();
        console.log(data);
      } catch (error) {
        console.error('Error:', error);
      }
    }
    
    fetchData();
    

确保你的代码能够优雅地处理网络错误,避免未处理的 Promise 拒绝警告。

回到顶部