NodeJS 从本地主机3000到本地主机8000读取时出现ECONNREFUSED(Nextjs - DjangoApp)

nbewdwxp  于 2022-12-29  发布在  Node.js
关注(0)|答案(2)|浏览(177)

当我尝试在前端和后端(React Next.js和Django)之间使用"fetch"节点函数发出"POST"请求时,我得到了一个"ECONNREFUSED"错误。
使用Postman的后端请求按预期工作。
Django在港口:8000和Next.js位于以下端口:3000.
它一直在工作,直到我安装了XCode,离子和电容器包(我真的不知道他们是否是我得到这个错误的原因)。
下面是错误:

TypeError: fetch failed
    at Object.fetch (node:internal/deps/undici/undici:11118:11)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async __WEBPACK_DEFAULT_EXPORT__ (webpack-internal:///(api)/./src/pages/api/account/login.js:18:28)
    at async Object.apiResolver (/Users/tomas.leblanc/Dev/HermesApp/frontend/node_modules/next/dist/server/api-utils/node.js:185:9)
    at async DevServer.runApi (/Users/tomas.leblanc/Dev/HermesApp/frontend/node_modules/next/dist/server/next-server.js:395:9)
    at async Object.fn (/Users/tomas.leblanc/Dev/HermesApp/frontend/node_modules/next/dist/server/base-server.js:496:37)
    at async Router.execute (/Users/tomas.leblanc/Dev/HermesApp/frontend/node_modules/next/dist/server/router.js:226:36)
    at async DevServer.run (/Users/tomas.leblanc/Dev/HermesApp/frontend/node_modules/next/dist/server/base-server.js:606:29)
    at async DevServer.run (/Users/tomas.leblanc/Dev/HermesApp/frontend/node_modules/next/dist/server/dev/next-dev-server.js:450:20)
    at async DevServer.handleRequest (/Users/tomas.leblanc/Dev/HermesApp/frontend/node_modules/next/dist/server/base-server.js:321:20) {
  cause: Error: connect ECONNREFUSED ::1:8000
      at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1300:16) {
    errno: -61,
    code: 'ECONNREFUSED',
    syscall: 'connect',
    address: '::1',
    port: 8000
  }
}

如果有人能帮我处理这个错误就太好了!
如果您需要更多的细节或项目文件,请填写免费询问:D
编辑1:
如果我启动前面的应用程序,并尝试执行获取功能,它会显示上面的arrero,但首先会显示这个:

(node:10488) ExperimentalWarning: The Fetch API is an experimental feature. This feature could change at any time
(Use `node --trace-warnings ...` to show where the warning was created)

但不应该是原因。
编辑2:
我确实将Node.js版本从"v18.11.0"降级到"v16.17.1",现在正在工作!!

blmhpbnm

blmhpbnm1#

将Node.js从v18降级到v16解决了此问题。

efzxgjgh

efzxgjgh2#

我似乎也面临着同样的问题,而且似乎与IP6有关。我可以看到您在堆栈跟踪中使用IP6:第一个月
显然在nodejs版本16以上的版本中IP6有一个问题。我认为是由这个变化引起的:https://www.reddit.com/r/ipv6/comments/qbr8jc/nodejs_finally_prefers_ipv6_addresses_over_ipv4/
您可以通过以下方式绕过此问题:
1.使用硬编码的ip4地址,如127.0.0.1
1.在linux中禁用ip6支持:参见https://www.techrepublic.com/article/how-to-disable-ipv6-on-linux
1.配置节点以首先使用IP4地址。请参阅ECONNREFUSED when making a request to localhost using fetch in Node.js

import dns from 'node:dns';
dns.setDefaultResultOrder('ipv4first');

如果有人能告诉我为什么IP6在最新版本的nodejs中不能(总是?)工作,我会很高兴听到这个消息。

相关问题