首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >代理错误:无法代理从本地主机请求http://localhost:5000/ :3000到/users

代理错误:无法代理从本地主机请求http://localhost:5000/ :3000到/users
EN

Stack Overflow用户
提问于 2022-07-31 00:18:22
回答 2查看 2.1K关注 0票数 0

我正在尝试为后端创建一个带有节点/表达式的简单的react应用程序。当我启动我的应用程序时,我会得到以下错误:

代码语言:javascript
复制
Proxy error: Could not proxy request /users from localhost:3000 to http://localhost:5000/.
See https://nodejs.org/api/errors.html#errors_common_system_errors for more information (ECONNREFUSED).

我的前端package.json看起来像这样

前端很简单。fetchUserData()useEffect()下就是所谓的后端。

代码语言:javascript
复制
import React, { useEffect, useState } from "react";

function App() {
  let [userData, setUserData] = useState([{}]);

  useEffect(() => {
    const fetchUserData = async () => {
      const response = await fetch(`/users`);
      const data = await response.json();
      setUserData(data);
    };

    fetchUserData();
  }, []);

  return (
    <div>
      <h1>Hello React World!</h1>
    </div>
  );
}

export default App;

当我刚开始这个项目的时候,后端是非常无厘头的。如果我直接从浏览器或邮递员请求http://localhost:5000/users,我就可以得到正确的响应:

代码语言:javascript
复制
const express = require("express");
const app = express();
const port = process.env.PORT || 5000;

app.use(express.json());
app.use(express.urlencoded({ extended: true }));

app.get("/users", (req, res) => {
  console.log(req);
  res.json({ users: ["Bob", "Sally"] });
});

app.listen(port, () => {
  console.log(`Listening on port ${port}`);
});

当我试图在http://localhost:3000上加载前端时,会出现错误消息,然后该前端将获取后端资源。我查看了chrome的网络选项卡,由于某种原因,它将转到3000端口,而不是5000端口:

我试过以下几种方法,但没有运气:

  1. 关闭我的应用程序。删除包-lock.json和node_modules,重新安装它们。
  2. 在package.json
  3. Tried中为"proxy“设置的字符串末尾添加'/‘,在package.json
  4. Tried中添加127.0.0.1,在服务器package.json
  5. Tried中添加”-忽略客户端“,在服务器package.json
  6. Tried中添加"secure":false。

编辑1:这个问题把我逼疯了。如果我从package.json中删除代理,将cors添加到服务器端,并使用端点的绝对路径,而不是客户机端获取请求中的相对路径,那么它可以工作。但我更愿意使用相对路径。

代码语言:javascript
复制
import React, { useEffect, useState } from "react";

function App() {
  let [userData, setUserData] = useState([{}]);

  useEffect(() => {
    const fetchUserData = async () => {
      const response = await fetch(`http://localhost:5000/users`);
      const data = await response.json();
      setUserData(data);
    };

    fetchUserData();
  }, []);

  return (
    <div>
      <h1>Hello React World!</h1>
    </div>
  );
}

export default App;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-07-31 17:46:55

我终于开始工作了!

经过大量的实验,我意识到这确实是一个环境问题。这就解释了很多原因,因为我尝试过的许多其他建议都是为其他人工作的,而不是为我工作的。

发生的情况是,我的客户端使用wsl作为终端,而我的后端则使用PowerShell。当我把两个都换成wsl时,它起了作用。或者当我把两个都换成Powershell的时候,它也起作用了。

票数 0
EN

Stack Overflow用户

发布于 2022-07-31 03:49:56

在尝试复制您的问题时,我认为您在代理中有"http://localhost:5000/"“:”/users,但是您也传递了一个对"/users“的获取请求,这将导致一个"http://localhost:5000//users”。

我可以想象,当您试图解决这个问题时,问题是在更改package.json以包含代理之后没有重新启动React,然后在重新启动React时,您已经添加了额外的"/“。

同样,在浏览器console.log中,无论您的代理在哪里,它都会将http://localhost:3000作为地址而不是实际的端点--它可能有点像一条红鲱鱼。

希望它能帮上忙

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73179887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档