Vuecli3配置代理及遇到的问题解决
作者:黄金原野
配置方法
内容说明:
此处前端应用的端口为8088,后端应用的端口为8052,域都为localhost
后端接口为http://localhost:8052/Menu/xxxx
。
配置修改
vue.config.js
文件中的proxy
部分
devServer: { open: true, //配置自动启动浏览器 // host: '0.0.0.0', port: 8088, https: false, hot: false, hotOnly: false, // 设置代理 proxy: { '^/Menu/': { target: 'http://localhost:8052', // 代理到的后端接口地址 ws: true, //如果要代理 websockets,配置这个参数 secure: false, // 如果是https接口,需要配置这个参数 changeOrigin: true, //是否跨域 // pathRewrite: { // '/Menu': '/' // } } }, before: app => {} },
可能遇到的问题
浏览器依然报错跨域问题,代理未能生效
请求地址的配置文件在.env.development
中,原来配置如下:
NODE_ENV = 'development' VUE_APP_CURRENTMODE='dev' //local // 这是后端接口 VUE_APP_API_HOST=http://localhost:8052/Menu
其中VUE_APP_API_HOST
为axios请求时,对应的baseURL
地址
// axios.js // create an axios instance const service = axios.create({ baseURL: process.env.VUE_APP_API_HOST, // api 的 base_url timeout: 5000 // request timeout })
此时启动VUE项目,依然报错跨域问题。因为此时请求的地址依然是http://localhost:8052
开头,并未牵涉到配置的代理,需要将请求的地址修改为http://localhost:8088
,即
NODE_ENV = 'development' VUE_APP_CURRENTMODE='dev' //local // 这是后端接口 VUE_APP_API_HOST=http://localhost:8088/Menu
此时,代理会生效,但有可能会报错404
pathRewrite可能会牵涉的路径问题
这里针对的只是后端接口,浏览器中前端的请求与此无关,相关的接口都可以用postman访问测试。
即,可以用postman测试http://localhost:8088/Menu/xxxx
等一系列接口,因为vue已经设置了其代理。
(注:此处前端接口指:vue项目运行起来时,浏览器控制台中XHR能看到的接口;
后端接口指经过代理后的(后端)接口,它本身还是后端接口,只是经过了代理,可以用前端的ip和端口通过postman来调用。在某些情况下,前端接口和后端接口会存在路径上的偏差造成请求404)
一般来说,pathRewrite的配置如下,作用是修改请求接口的地址(后端接口)
pathRewrite: { '/Menu': '/' } // '^/api': '/api' // 这种接口配置出来 http://localhost:8088/api/login // '^/api': '/' 这种接口配置出来 http://localhost:8088/login
然而这仅仅是理论上的配置,在实际使用中,我遇到了如下问题:
如果在配置中保留'/Menu': '/'
,能够代理成功url会变成http://localhost:8088/Menu/Menu/xxx
如果去除,能够代理成功的url为http://localhost:8088/Menu/xxxx
甚至在写成'/Menu': '/Menu'
时,能够成功代理的url也为http://localhost:8088/Menu/xxx
与理论上的配置相反
不确定是由于版本或者是其他什么问题导致的这一奇怪的现象,如果有人遇到此类的问题,可以考虑修改此处的配置。由于我只需要解决浏览器的跨域问题,只要保证前端调用的接口和后端能够成功代理的接口一致即可。
以上就是Vuecli3配置代理及遇到的问题解决的详细内容,更多关于Vuecli3配置代理的资料请关注脚本之家其它相关文章!