javascript - 为什么不响应代理请求

标签 javascript node.js reactjs server proxy

我有一个在端口 3001 上运行的 Node 后端服务器,以及一个我试图代理到该端口以获取数据的 React 服务器。

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

但是,当我尝试向服务器上的“测试”路由发出简单请求时,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( Node )

{
  "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)

最佳答案

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

关于javascript - 为什么不响应代理请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51471399/

相关文章:

node.js - MongoDB中根据时间段获取数据

ReactJs CreateClass 不是一个函数

javascript - 使用单个函数如何调用两个不同的输入字段

javascript - Rails remote_function,我可以使用javascript在客户端动态设置id吗?

node.js - 如何搜索类型为 'array' 的模型属性

javascript - 如果我们已经在检查长度,为什么还要检查值

reactjs - 将空 block 添加到 Draft.js 而不移动选择

javascript - 按钮重置时 Formik 清除表单

javascript - 使用 rafael.js 拖动圆圈 - 代码示例

javascript - 检测下拉列表是否为多选