当前位置: 首页 > 知识库问答 >
问题:

为什么不会对代理请求做出反应

万高畅
2023-03-14

我有一个在端口3001上运行的节点后端服务器,以及一个我尝试代理到该端口以获取数据的反应服务器。

现在,我已经在客户端文件夹的package.json文件中包含了“代理”行,告诉React将请求代理到端口3001。

然而,当我试图向服务器上的“test”路由发出一个简单的请求时,React代码不会代理这个请求。它将我发送到localhost:3000/test,而不是localhost:3001/test。

我不知道为什么会这样。为什么React代码不能正确代理我的请求?

Package.json(客户)

{
  "name": "client",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "react": "^16.4.1",
    "react-dom": "^16.4.1",
    "react-scripts": "1.1.4"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test --env=jsdom",
    "eject": "react-scripts eject"
  },
  "proxy": "http://localhost:3001"
}

Package.json(节点)

{
  "name": "todo-api",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "mocha tests/*.test.js  --exit",
    "test-watch": "export NODE_ENV=test || \"SET NODE_ENV=test\" && nodemon --exec \"npm test\"",
    "dev-server": "node server.js",
    "client": "npm run start --prefix client",
    "dev": "concurrently \"npm run dev-server\" \"npm run client\""
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "axios": "^0.18.0",
    "bcryptjs": "^2.4.3",
    "body-parser": "^1.18.3",
    "concurrently": "^3.6.0",
    "express": "^4.16.3",
    "jsonwebtoken": "^8.2.2",
    "lodash": "^4.17.1i0",
    "mongodb": "^3.1.0-beta4",
    "mongoose": "^5.1.1",
    "nodemailer": "^4.6.4",
    "twitter-validate": "^1.0.8",
    "validator": "^10.3.0"
  },
  "devDependencies": {
    "expect": "^1.20.2",
    "mocha": "^5.1.1",
    "nodemon": "^1.17.4",
    "rewire": "^4.0.1",
    "supertest": "^3.1.0"
  }
}

登录路线:

  login(e) {
    e.preventDefault();
    axios.get("/test")
    .then((res) => {
      console.log(res);
    })
    .catch((e) => {
      console.log(e);
    })
  }

而实际的index.js文件…

import React from "react";
import ReactDOM from "react-dom";
import "./styles/styles.scss";
import axios from "axios";

  class Login extends React.Component {

  showRoute(e){
    e.preventDefault();
    axios.get("/test")
      .then((res) => {
        console.log(res);
      })
      .catch((err) => {
        console.log(err);
      });
  }

  render(){
    return (
      <div>
        <form onSubmit={this.login}>
          <legend>Login</legend>
          <label>Email:</label>
          <input type='text' name='email'/>
          <label>Password:</label>
          <input type='text' name='password'/>
          <button>Login</button>
        </form>
        <button onClick={this.showRoute}>Forgot Password?</button>
      </div>
    );
  }
}

ReactDOM.render(<Login />, document.getElementById("app"));

我得到的错误消息是:

GET http://localhost:3000/test 404 (Not Found)

共有2个答案

赫连卓
2023-03-14

问题在webpack-config中,请将webpack.dev.js设置为以下内容,然后重新启动dev服务器

模块导出 = 合并(常见, { 模式: “开发”, devServer: { 主机: 'localhost', 端口: 3000, 打开: true, 历史记录回退: true, 代理: { '/api': { 目标: 'http://localhost:3001', 安全: 假 } }}, 开发工具: '内联源映射' });

如果您使用自己的React入门包,这个解决方案是可行的,在您的情况下,尝试找出“create-react-app”的webpack开发配置文件在哪里,并按照上面的代码进行更改。应该在“/node _ modules/react-scripts/config”路径下。

干杯!

翟展
2023-03-14

你误解了代理。
代理不会改变你请求的url,它只是将请求从localhost:3000传输到localhost:3001。
程序不按你预期工作的问题可能是配置代理方式错误造成的。作为你发布的代码,代理可能被设置在server.js.

 类似资料:
  • 我使用以下设置使用apache构建转发代理服务器: 主机文件 然后我使用curl测试代理服务器 输出 我认为https代理流是: > 代理服务器将此连接请求转发到www.google。com。香港:443 www.google。com。hk:443向代理服务器返回200连接建立的响应 代理服务器将响应转发给curl curl开始向代理服务器发送tls握手数据报(可能是加密的?) 代理服务器对数据报

  • 我有一个,其中包含一个带有(页面轴)的面板。 我的问题是JScrollPane不会对鼠标滚轮事件做出反应。要让它使用鼠标滚轮滚动,我需要在上。 我找到了这个线程,但没有或,只有。我认为我的问题来自这样一个事实,即我的作用于包含其他面板的。因此,当鼠标在中的面板上时,事件似乎是由这个面板使用的,我从未在滚动面板中看到过。 这里有一个简单的测试用例,试图展示我在Swing应用程序中尝试做的事情。 框架

  • 我看到了一些关于vue的问题。js watchers,但我没有找到一个问题来处理我的问题,所以这里是: 在我的组件中。vue我使用以下代码: 在使用此组件的父vue页面中,我使用了以下功能: 如果我添加了另一个属性,则不会再触发观察者: 编辑:在快乐的回答之后,我的组件部分现在看起来像这样:

  • 我有一个创建-反应-应用程序前端,我需要代理和更改起源到我的烧瓶套接字-io后端开发期间,以绕过CORS。我已经建立了超文本传输协议-代理-中间件,这是我在过去的项目中成功完成的。我的roxy.js: 在套接字设置期间,我没有做任何特别的事情: 当我运行开发服务器时,它不会代理我的套接字iOS请求。我的服务器报告: 有没有想过我可能做得不对?

  • 我正在尝试测试我的贝宝沙箱帐户中的经常性付款。我跟踪了这个链接https://developer.paypal.com/webapps/developer/docs/classic/express-checkout/ht_ec-recurringpaymentprofile-curl-etc/ 我试了很多次,贝宝只显示这个消息。我怎样才能为我的沙箱帐户实现不出错的重复支付?

  • 这是我的密码-------- 当我尝试对.post(/register…)路由进行邮递员测试时,它会暂停加载几分钟,然后给出错误-- “无法得到任何响应 连接到 http://localhost:5000/api/users/register 时出错。为什么会发生这种情况: 服务器无法发送响应:确保后端正常工作 自签名 SSL 证书被阻止:通过在“设置”中关闭“SSL 证书验证”来解决此问题 请求