Nodejs (node:7804) UnhandledPromiseRejectionWarning: Error: connect ETIMEDOUT
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 来请求都无法得到返回数据,但为什么浏览器又可以直接返回呢?应该怎么解决?
你发的那个 URL 应该是需要 FQ 的, 你的浏览器估计有开启代理, 所以你浏览器可以打开.
但你用 axios 请求时没有设置代理, 所以请求不到.
#2 全局没用,要设置环境变量才行的
你浏览器写的是 https,node 里面写的是 http
试了下在我这没有问题,考虑在后面添加歌 catch,看下具体的错误原因吧。感觉是网络问题导致的。虽然你写的 http,但是会自动跳转到 https,所以应该和这个没关系。还不行的话,列举下你的环境信息(node/axios veriosn)
Promise
的缺点之一就是内部跑出异常需要外部主动捕获。
针对你提到的 Nodejs (node:7804) UnhandledPromiseRejectionWarning: Error: connect ETIMEDOUT
错误,这通常表示 Node.js 在尝试建立网络连接时超时了。ETIMEDOUT
错误通常发生在请求发送到服务器后,服务器在预定时间内没有响应。以下是一些可能的原因和解决方法:
-
网络问题:
- 检查你的网络连接是否稳定。
- 确认目标服务器是否可达,使用
ping
或telnet
命令测试网络连接。
-
服务器问题:
- 服务器可能过载或宕机。
- 检查服务器状态,如果可能,联系服务器管理员。
-
代码处理:
- 确保你的 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();
- 确保你的 Node.js 代码正确处理了 Promise 拒绝。你可以通过添加
确保你的代码能够优雅地处理网络错误,避免未处理的 Promise 拒绝警告。