指定时,package.json中的"proxy"必须是字符串

ric*_*oon 30 reactjs

我想在我的react客户端中有代理,我的package.json包含:

...
"scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "proxy": {
    "/auth/google": {
      "target": "http://localhost:5000"
    }
   },
...
Run Code Online (Sandbox Code Playgroud)

但是当我跑它时,我得到了错误

When specified, "proxy" in package.json must be a string.
[1] Instead, the type of "proxy" was "object".
[1] Either remove "proxy" from package.json, or make it a string.
Run Code Online (Sandbox Code Playgroud)

我试图转换为字符串,没有错误,但代理不起作用

"proxy": "http://localhost:5000"
Run Code Online (Sandbox Code Playgroud)

我的App.js

<div className="App">
        <header className="App-header">
          <img src={logo} className="App-logo" alt="logo" />
          <p>hey there</p>
          <a href="/auth/google">Sign In With Google</a>
        </header>
      </div>
Run Code Online (Sandbox Code Playgroud)

Roh*_*har 50

您面临的问题是CRA v2.

首先,如果您只是在代理中使用纯字符串,则不需要任何其他配置.但是,当您使用对象时,您正在使用高级配置.

因此,您必须按照下面列出的步骤操作:

  1. 通过键入来安装http-proxy-middleware npm i --save http-proxy-middleware

  2. 从package.json中删除条目:

"proxy": {
    "/auth/google": {
        "target": "http://localhost:5000"
    }
}
Run Code Online (Sandbox Code Playgroud)
  1. 现在为您的代理创建一个安装文件.您应该在客户端的src文件夹中将其命名为setupProxy.js,然后键入以下代码:
const proxy = require('http-proxy-middleware');
module.exports = function(app) {
    app.use(proxy('/auth/google', 
        { target: 'http://localhost:5000/' }
    ));
}
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请检查

  • 对于 2020 年的任何人,请将导入替换为 `const { createProxyMiddleware } = require("http-proxy-middleware");` 并将函数中的 `proxy` 替换为 `createProxyMiddleware`。谢谢@RohanDhar (4认同)
  • 没什么。只需在客户端目录的 src 文件夹中创建一个名为 setupProxy.js 的文件。就是这样。 (2认同)

Vin*_* Ho 25

我认为这是"create-react-app"问题.

您可以访问https://github.com/facebook/create-react-app/issues/5103 迁移到新的代理处理方法.

简而言之,您只需要安装一个名为"http-proxy-middleware"的新库.

npm install http-proxy-middleware --save
Run Code Online (Sandbox Code Playgroud)

然后创建一个新文件"src/setupProxy.js",然后键入

const proxy = require('http-proxy-middleware');

module.exports = function(app) {
  app.use(proxy('/auth/google', { target: 'http://localhost:5000/' }));
};
Run Code Online (Sandbox Code Playgroud)

希望这可以解决你的问题,快乐的黑客攻击!

  • 不适用于最新版本,表示“代理”不是功能。需要将 `const proxy = require('http-proxy-middleware');` 替换为 `const { createProxyMiddleware } = require('http-proxy-middleware');` 并使用 `createProxyMiddleware` 函数,如这个问题的最新回复。 (3认同)
  • ,您的解决方案无法正常工作,我在将api命名为404时将setupProxy.js放在src文件夹中 (2认同)

小智 10

首先,使用npm或Yarn安装http-proxy-middleware:

$ npm install http-proxy-middleware --save
$ # or
$ yarn add http-proxy-middleware
Run Code Online (Sandbox Code Playgroud)

接下来,创建src/setupProxy.js并将以下内容放入其中:

const proxy = require('http-proxy-middleware')

module.exports = function(app) {
  // ...
}
Run Code Online (Sandbox Code Playgroud)

现在,逐个迁移代理对象中的每个条目,例如:

"proxy": {
  "/api": {
    "target": "http://localhost:5000/"
    },
  "/*.svg": {
    "target": "http://localhost:5000/"
  }
}
Run Code Online (Sandbox Code Playgroud)

将条目放入src/setupProxy.js如下:

const proxy = require('http-proxy-middleware')

module.exports = function(app) {
  app.use(proxy('/api', { target: 'http://localhost:5000/' }))
  app.use(proxy('/*.svg', { target: 'http://localhost:5000/' }))
}
Run Code Online (Sandbox Code Playgroud)

您现在也可以使用完全自定义逻辑!我从这个链接获得了这个工作响应,因此分享 - https://github.com/facebook/create-react-app/issues/5103


imr*_*der 9

对于 2020 年的人,请http-proxy-middleware通过npm i --save http-proxy-middlewareclient文件夹内键入来安装。

从 中删除条目package.json

"proxy": {
    "/auth/google": {
        "target": "http://localhost:5000"
    }
}
Run Code Online (Sandbox Code Playgroud)

现在为您的代理创建一个安装文件。您应该setupProxy.js在客户端的 src 文件夹中将其命名并键入以下代码:

const { createProxyMiddleware } = require("http-proxy-middleware");

module.exports = function (app) {
  app.use(
    createProxyMiddleware("/auth/google", { target: "http://localhost:5000/" })
  );
};
Run Code Online (Sandbox Code Playgroud)

PS:您不需要setupProxy.jsserver.js或 中包含任何地方index.js。只需复制和粘贴。


Jon*_*Jon 5

以下对我有用:

从 package.json 中删除“代理”。

在客户端目录中安装“http-proxy-middleware”。为此,请 cd 进入客户端目录并运行“npm i --save http-proxy-middleware”。然后,在客户端的 src 目录中创建一个名为“setupProxy.js”的新文件。将以下代码放入此文件中:

const { createProxyMiddleware } = require('http-proxy-middleware');
const proxy = require('http-proxy-middleware');
module.exports = function(app) {
    app.use(createProxyMiddleware('/api/', // replace with your endpoint
        { target: 'http://localhost:8000' } // replace with your target
    ));
}
Run Code Online (Sandbox Code Playgroud)

重新启动服务器,你应该很高兴。