反应,节点 axios 不工作,但 fetch 工作

Posted

技术标签:

【中文标题】反应,节点 axios 不工作,但 fetch 工作【英文标题】:React, Node axios not working but fetch is working 【发布时间】:2022-01-24 05:37:56 【问题描述】:

在我的 MERN 应用程序中,我尝试像往常一样使用 axios,但我稍微更改了文件结构,我认为这影响了我使用 axios 的能力(它更短,我更喜欢它)。

服务器始终在 nodemon 上运行 port 3001 客户端总是在port 3000 上运行npm start

过去与 axios 合作过的文件结构(A):

server
    client
        //react files here
    routes
        index.js
    server.js

不适用于 axios 但可用于 fetch 的文件结构 (B)(我收到错误 GET http://localhost:3000/api/data 404 (Not Found))

parent
    client
        //React files here
    server
        //node files here

我的 axios 代码:

const res = await axios.get('/api/data')

我的获取代码:

const res = await fetch('http://localhost:3001/api/data')

在我的 React 应用程序内部,axios 与文件结构 A 完美配合,但当我将 axios 与文件结构 B 一起使用时,它会产生错误。

所以我的问题是: 为什么我的 axios 不能在 fetch 时一直工作? (我认为这可能与 axios 需要成为服务器的孩子有关,而 fetch 可以在任何它想要的地方,但我觉得这是错误的) 我是否可以进行任何更改以使 axios 与文件结构 B 一起使用?

【问题讨论】:

这可能是代理问题。你是否在你的 package.json 文件中设置了代理? 您能否分享您遇到的错误? 你需要像这样在你的 Axios 中使用整个 URL 路径: const res = await axios.get('localhost:3001/api/data') @ertemishakk 在我的 package.json 中,我确实使用了代理。我使用了迄今为止我在所有项目中使用的相同代理:“proxy”:“localhost:3001”,此外,如果您仔细查看文件结构 B 部分中的最后一句,您会注意到我有分享了我收到的错误。 @NazmulHasan 指定 localhost:3001 确实有效,我感谢你,但我从来没有在我的任何其他项目中添加整个路径,这很奇怪,但我想这给了我一个谷歌的新事物。也许存在代理问题。我的这部分代码是从我的其他项目中复制的,因此问题可能是我在复制项目时错过的反应更新或偷偷摸摸的文件。 【参考方案1】:

您在 axios 调用中使用了错误的端口。

localhost:3000/api/data, replace 3000 with 3001

【讨论】:

当我使用 axios 时,我从来不需要指定端口,这就是我要问的问题。过去,我有文件结构 A 和 axios 版本“axios”:“^0.21.4”,(早期版本的 axios 也可以正常工作)而且我不必指定确切的路径,我只需键入 axios .get('/api/route") 对于我当前的错误,我使用的是文件结构 B 和 axios 版本“axios”:“^0.24.0”,所以,在过去的 3 个版本中,axios 发生了一些变化,axios 取决于关于文件结构或有一行代码我遗漏了。我希望这里有人可以确切地知道原因。

以上是关于反应,节点 axios 不工作,但 fetch 工作的主要内容,如果未能解决你的问题,请参考以下文章

如何在 axios fetch 中减小、压缩 <Image> 大小? - 反应原生

如何通过 Axios 将复杂对象从反应发布到节点?

Axios 浏览器支持

axios 不工作,而 fetch 工作

使用 fetch 登录,但现在使用 axios [关闭]

反应节点通过 axios 传递文件与 multer 错误 500