指定时,package.json中的“ proxy”必须为字符串

时间:2018-10-02 09:54:11

标签: reactjs

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

static void Main(string[] args){

        StreamReader streamReader = new StreamReader("E:/Adventure Story/Intro.txt");

        string intro = "";
        string line;

        while ((line = streamReader.ReadLine()) != null)
        {
            intro += line;
            if(line == "")
            {
                intro += "\n\n";
            }
        } 
        WordWrap(intro);

public static void WordWrap(string paragraph)
    {
        paragraph = new Regex(@" {2,}").Replace(paragraph.Trim(), @" ");
        var left = Console.CursorLeft; var top = Console.CursorTop; var lines = new List<string>();
        for (var i = 0; paragraph.Length > 0; i++)
        {
            lines.Add(paragraph.Substring(0, Math.Min(Console.WindowWidth, paragraph.Length)));
            var length = lines[i].LastIndexOf(" ", StringComparison.Ordinal);
            if (length > 0) lines[i] = lines[i].Remove(length);
            paragraph = paragraph.Substring(Math.Min(lines[i].Length + 1, paragraph.Length));
            Console.SetCursorPosition(left, top + i); Console.WriteLine(lines[i]);
        }
    }

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

...
"scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "proxy": {
    "/auth/google": {
      "target": "http://localhost:5000"
    }
   },
...

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

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.

我的App.js

"proxy": "http://localhost:5000"

17 个答案:

答案 0 :(得分:41)

您面临的问题是由于 CRA v2

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

因此,您必须遵循以下步骤:

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

  2. 安装http-proxy-middleware
  3. 从package.json中删除条目:

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

有关更多信息,请检查this

答案 1 :(得分:22)

我认为这是“ create-react-app”问题。

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

简而言之,您只需要安装一个名为“ http-proxy-middleware”的新库即可。

npm install http-proxy-middleware --save

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

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

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

希望这可以解决您的问题,祝您黑客愉快!

答案 2 :(得分:8)

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

$ npm install http-proxy-middleware --save
$ # or
$ yarn add http-proxy-middleware

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

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

module.exports = function(app) {
  // ...
}

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

"proxy": {
  "/api": {
    "target": "http://localhost:5000/"
    },
  "/*.svg": {
    "target": "http://localhost:5000/"
  }
}

将条目放入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/' }))
}

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

答案 3 :(得分: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
    ));
}

重新启动服务器,您应该一切顺利。

答案 4 :(得分:4)

对于2020年的人来说, 通过在http-proxy-middleware文件夹中键入npm i --save http-proxy-middleware安装client

package.json中删除条目:

"proxy": {
    "/auth/google": {
        "target": "http://localhost:5000"
    }
}

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

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

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

PS:您无需在setupProxy.jsserver.js中的任何地方包含index.js。只需复制并粘贴。

答案 5 :(得分:1)

这对我有用(就像有几个人已经回答过一样)。但我写这个是为了以防有人问这是否仍然是 2021 年的有效答案。

  • 从您的 package.json 文件中删除它:
  "proxy": {
            "/auth/google": {
              "target": "http://localhost:5000"
            }
  • 通过运行 npm install --save http-proxy-middleware 安装代理中间件。
  • 在前端的 src(就在 index.js 文件旁边)文件中创建 setupProxy.js 文件。
  • 在那个 setupProxy.js 文件中输入:
const proxy = require('http-proxy-middleware');

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

当然,您的端口可以是任何东西。它不一定是 5000。无论您在何处运行后端服务。 这就对了。您不必在任何地方导入此文件。它按原样工作。

答案 6 :(得分:1)

此刻,我正在使用反应16.8.13 ,它工作正常:

1-从"proxy": {***}文件中删除package.json

2-类型npm install http-proxy-middleware

3-创建文件src/setupProxy.js

4插入如下代码:

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

module.exports = (app) => {
    app.use(
        createProxyMiddleware('/endpoint/*', {
            target: 'http://address/',
            secure: false,
        }),
    );
};

答案 7 :(得分:1)

如果您需要代理请求并重写url,例如将localhost:3000/api/backend/some/method改写为https://api-server.example.com/some/method,则还需要使用pathRewrite选项:

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

module.exports = function(app) {
  app.use(
    "/api/backend",
    createProxyMiddleware({
      target: "https://api-server.example.com",
      changeOrigin: true,
      pathRewrite: {
        "^/api/backend": "",
      },
    })
  );
};

答案 8 :(得分:0)

class Student (models.Model):
    ...
    @property
    def today_classes(self):
       return self.classes.filter(classstudentmapping__days__contains=[str(datetime.today().weekday())])


# Usage:
student.today_classes # will return queryset

答案 9 :(得分:0)

这与create-react-app版本2中的错误有关。

只需运行

$ npm install react-scripts@next --save
$ # or
$ yarn add react-scripts@next

在以下位置找到答案

https://github.com/facebook/create-react-app/issues/5103

答案 10 :(得分:0)

        ...
        "scripts": {
            "start": "react-scripts start",
            "build": "react-scripts build",
            "test": "react-scripts test",
            "eject": "react-scripts eject"
          },
          "proxy": {
            "/auth/google": {
              "target": "http://localhost:5000"
            }
           },
        ...

    When specified, "proxy" in package.json must be a string.
    Just change `"proxy": "http://localhost:5000"` and you are good to go.
    If that doesn't solve the problem then register your proxy using **http-proxy-middleware**

    $ npm install http-proxy-middleware --save
    $ # or
    $ yarn add http-proxy-middleware

    Then create setypProxy.js file under src directory the put the following code.
const proxy = require('http-proxy-middleware');
module.exports = app => {
  app.use(
    proxy('/auth/google', {
      target: 'http://localhost:5000'
    })
  );
 app.use(
    proxy('/auth/facebook', {
      target: 'http://localhost:6000'
    })
  );
};

答案 11 :(得分:0)

https://github.com/facebook/create-react-app/issues/5103

将高级代理配置移动到src / setupProxy.js

只有在v1中使用了高级代理配置的个人才需要进行此更改。

要检查是否需要采取措施,请在package.json中查找代理密钥。然后,按照下表进行操作。

我在package.json中找不到代理密钥 无需采取任何措施! proxy的值是一个字符串(例如http://localhost:5000) 无需采取任何措施! 代理的值是一个对象 请遵循以下迁移说明。 如果您的代理是一个对象,则意味着您正在使用高级代理配置。

同样,如果您的代理字段是字符串,例如http://localhost:5000,您无需执行任何操作。仍然支持此功能,并且具有相同的行为。

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

{
"name": "reactreduxboilerplate",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
  "server": "nodemon --watch server --exec babel-node -- server/server.dev.js",
  "test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"devDependencies": {
  "babel-cli": "^6.26.0",
  "babel-core": "^6.26.3",
  "babel-loader": "^7.1.5",
  "babel-plugin-transform-object-rest-spread": "^6.26.0",
  "babel-preset-es2015": "^6.24.1",
  "babel-preset-react": "^6.24.1",
  "bootstrap": "^4.3.1",
  "express": "^4.17.1",
  "nodemon": "^1.19.1",
  "react-hot-loader": "^4.12.0",
  "react-redux": "^7.1.0",
  "react-tradingview-widget": "^1.3.0",
  "redux": "^4.0.1",
  "redux-logger": "^3.0.6",
  "redux-thunk": "^2.3.0",
  "webpack": "^4.35.0",
  "webpack-dev-middleware": "^3.7.0",
  "webpack-hot-middleware": "^2.25.0"
},
"dependencies": {
  "axios": "^0.19.0",
  "css-loader": "^3.0.0",
  "file-loader": "^4.0.0",
  "node-sass": "^4.12.0",
  "react": "^16.8.6",
  "react-dom": "^16.8.6",
  "react-router": "^5.0.1",
  "react-router-dom": "^5.0.1",
  "sass-loader": "^7.1.0",
  "style-loader": "^0.23.1"
}

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

$ npm install http-proxy-middleware --save
$ # or
$ yarn add http-proxy-middleware

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

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

module.exports = function(app) {
  // ...
}

像这样将条目放入src / setupProxy.js:

"proxy": {
  "/api": {
    "target": "http://localhost:5000/"
    },
  "/*.svg": {
    "target": "http://localhost:5000/"
  }
}

您现在也可以在此处使用完全自定义的逻辑!这是不可能的。

成功了。

答案 12 :(得分:0)

在我的情况下,我不需要 src / setupProxy.js ... 我使用axios ... Check About Axios Proxy

检查节点库是否有:http-proxy-middleware是可选的,我不需要它!

只需尝试重新启动服务器端就可以了! 添加检查:

class OrdersController < ApplicationController
  before_action :authenticate_user!, :except => [:show]

答案 13 :(得分:0)

将代理更改为类似的内容,并希望它对我有用。

“代理”:“ http://localhost:5000/auth/google

答案 14 :(得分:0)

在src文件夹中创建一个setupProxy.js文件,然后复制并粘贴以下代码。

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

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

答案 15 :(得分:0)

  

将“ http-proxy-middleware”安装到客户端中,而不是“不在服务器内部”。

在client / src /目录中添加setupProxy.js。 (应该是这样:client / src / setupProxy.js)

在其中添加以下几行。

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

module.exports = app => {
   app.use(proxy("/auth/google", { target: "http://localhost:5000/" }));
};

就是这样,进入您的Google开发人员控制台,然后将localhost:3000 / auth / google / callback添加到您的项目中。

答案 16 :(得分:0)

在客户端(React app)中创建一个名为 src/setupProxy.js确保重新启动服务器。由于您正在处理源目录之外的文件,因此package.json文件需要重新启动。