1.产生的问题
- 1.在前后端分离开发的时候产生跨域问题需要解决
- 2.react如何配置代理
- 3.react配置代理后产生的问题
2.解决方案
- 1.检查自己的create-react-app脚手架若在2.0版本以下,使用对象类型配置代理,在自己项目的package.json文件中配置如下:
"proxy":{
"/api":{
"target":"http://127.0.0.1:5000", # 跨域地址
"changeOrigin": true, # 是否允许跨域
"pathRewrite": { # 重写路径
"^/api": "/"
},
}
}
俩点注,以下配置方法等同:
1注:例如后端接口地址是http://127.0.0.1:5000/searchAllTable,经过上述配置以后前端访问就变成http://127.0.0.1:5000/api/searchAllTable,就是说前端写访问api的时候需要向后端提供的地址加一个/api,然后经过{"pathRewrite":{"^api": "/"}}这个属性的重写路径配置,实际访问地址就还是后端提供接口的实际路径http://127.0.0.1:5000/searchAllTable
2注:注意这个pathRewrite,如果不配置,访问和实际地址就都是http://127.0.0.1:5000/api/searchAllTable,后端访问接口地址也是这样的路径,如果配置了,那就注意一下自己重写后的访问地址。
- 2.若脚手架版本在2.0以上只能配置string类型
"proxy": "http://127.0.0.1:5000",
- 3.配置一个或者多个代理,最好的方式是使用middleware中间件进行配置
安装middleware:在项目根目录下执行yarn add http-proxy-middleware使用npm,cnpm都可以,我这使用yarn。安装好以后在项目的src目录下建立setupProxy.js文件。
# src/setupProxy.js文件
const proxy = require("http-proxy-middleware");
module.exports = function(app) {
app.use(
# 这有一个小问题
proxy("/api/**", {
target: "http://127.0.0.1:5000",//跨域地址
changeOrigin: true
pathRewrite: {
"^/api": "/"
},
})
);
};
如果配置成这样,启动react项目访问就会有如下的错误:
经过查看源码发现:
这里好像只能使用createProxyMiddleware,于是配置修改如下:
const { createProxyMiddleware } = require('http-proxy-middleware');
// const proxy = require('http-proxy-middleware');
module.exports = function (app) {
app.use(
createProxyMiddleware('/api', {
target: 'http://127.0.0.1:5000',
secure: false, # 指定Cookies能否被用户读取
changeOrigin: true,
pathRewrite: {
"^/api": "/"
},
}),
# 配置多个代理继续往下加就可以
createProxyMiddleware('/api1', {
target: 'http://127.0.0.1:9999',
secure: false, # 指定Cookies能否被用户读取
changeOrigin: true,
pathRewrite: {
"^/api": "/"
},
})
);
};
重启项目,问题得到解决!
3.问题得到解决
经过上述的一步步调试,终于跨域问题得到解决,心累。。。
在配置代理的过程中,发生拒绝连接请求,我一直以为setupProxy.js与我项目中的config-overrides.js(一个按需导入antd组件库的配置文件)发生冲突,于是我把代理配置也尝试的配到config-overrides.js中,结果,项目是正常了,跨域还是没有解决,于是就到处出找资料查阅,终于啊,皇天不负有心人,问题得到了解决,我的心灵得到升华....