一、方案一
- 在使用
create-react-app脚手架创建react项目的时候,在开发时进行接口访问的时候,会出现跨域问题。 - 解决方法是在
package.json文件中增加如下配置,如下所示:"proxy": "http://localhost:5000" // 配置你要请求的服务器地址 - 这一种方法只针对于低版本的,
create-react-app的版本低于2.0的时候可以在package.json增加proxy配置,proxy可以是object类型。
二、方案二
- 在使用
create-react-app脚手架创建react项目的时候,在开发时进行接口访问的时候,会出现跨域问题。 - 解决方法是在
package.json文件中增加如下配置,配置多个代理。target是目标服务器;changeOrigin是默认false,是否需要改变原始主机头为目标URL;secure是如果是https接口 需要配置这个参数为true;pathRewrite是重写请求,比如我们源访问的是api,那么请求会被解析为/,如下所示:
"proxy": {
"/data": {
"target": "http://localhost",
"changeOrigin": true,
"pathRewrite": {"^/api" : "/"}
},
"/rest": {
"target": "http://localhost/rest",
"changeOrigin": true,
"pathRewrite": {"^/api" : "/"}
}
}
- 在运行后,会报错,提示只支持
string类型,不支持object,也同意是只支持低版本的。 - 对此,解决办法是降级,需要删除
node_module/react-scripts,然后执行npm i react-scripts@1.1.1 --save, 最后重启服务即可由前端解决跨域问题。
三、方案三
先下载
http-proxy-middleware,使用http-proxy-middleware解决跨域问题,通过npm i http-proxy-middleware --save命令下载http-proxy-middleware。创建
src/setupProxy.js,代码如下所示:const proxy = require("http-proxy-middleware"); module.exports = function (app) { // proxy第一个参数为要代理的路由 app.use(proxy("/data", { target: "http://localhost", //配置你要请求的服务器地址,代理后的请求网址 pathRewrite: {'^/data': ''}, //路径重写 changeOrigin: true, // 是否改变请求头 })) app.use(proxy("/rest", { target: "http://localhost/rest", pathRewrite: {'^/data': ''}, changeOrigin: true, })) };通过
npm run eject或者是yarn eject命令,让react项目中的配置文件暴露出来。在暴露后的配置文件中,
start.js里面做一下配置,如下所示:require('../src/setupProxy')(devServer);在
webpack.dev.conf.js中的devServer项进行配置,webpack文件是自己配置的, 没有暴露create-react-app的eject文件,代码如下所示:devServer: { // 配置webpack-dev-server, 在本地启动一个服务器运行 host: 'localhost', // 服务器的ip地址 希望服务器外可以访问就设置 0.0.0.0 port: 8088, // 端口 open: true, // 自动打开页面 historyApiFallback: true, proxy: { "/v1": { "target": "https://www.google.com/", "changeOrigin": true } } },
版权声明:本文为weixin_42614080原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。