若依管理系统vue proxy代理导致打包上线出现问题:
最近在使用若依管理系统中出现了代理服务导致的问题,代码如下:
vue.config.js文件配置
devServer: {
host: '0.0.0.0',
port: port,
proxy: {
// detail: https://cli.vuejs.org/config/#devserver-proxy
[process.env.VUE_APP_BASE_API]: {
target: `http://192.168.1.120:8002/`,
// target: `http://192.168.1.21:8002/`,
changeOrigin: true,
pathRewrite: {
['^' + process.env.VUE_APP_BASE_API]: ''
}
}
},
disableHostCheck: true
},
vue的开发环境文件.env.development
# 开发环境配置
ENV = 'development'
# 若依管理系统/开发环境
VUE_APP_BASE_API = '/dev-api'
# 路由懒加载
VUE_CLI_BABEL_TRANSPILE_MODULES = true
vue的生产环境文件.env.production
# 生产环境配置
ENV = 'production'
# 若依管理系统/生产环境
VUE_APP_BASE_API = '/pro-api'
axios代码
axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
// 创建axios实例
const service = axios.create({
// axios中请求配置有baseURL选项,表示请求URL公共部分
baseURL: process.env.VUE_APP_BASE_API,
// 超时
timeout: 10000
})
问题描述:
在本地开发时,请求后端接口。
后端的登录接口:
api/user/login?account=admin&password=12345678
请求时控制台显示:
http://localhost/dev-api/api/user/login?account=admin&password=12345678
成功。
但是,打包给后端测试,后端显示的请求是这样
http://localhost:8002/pro-api/api/user/login?account=admin&password=12345678
走不通,后来分析是这样。在前端本地开发时,node已经把接口头部给代理好了,这个dev-api会被编译忽略,直接找寻后面的接口api/user/login?account=admin&password=12345678。而到了生产环境时,没有node代理服务,因此访问的接口就是如图所示的整个字符串,pro-api就成了无意义字符串,因此接口也就错了。当时想过把VUE_APP_BASE_API 赋值为空或者/,然而这样在生产环境下会导致页面刷新之后,URL路由被当成接口进行访问,接着页面跳转显示:

,原因不明。
如果VUE_APP_BASE_API赋值为api,后面的接口去除api,生产环境下是可行了。但是开发环境下api被node忽略导致接口错误。
解决方案:
最后,解决方案。不使用vue的代理服务了,直接在axios下配置baseURL:
axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
// 创建axios实例
const service = axios.create({
// axios中请求配置有baseURL选项,表示请求URL公共部分
baseURL: 'http://192.168.1.120:8002/api',
// 超时
timeout: 10000
})
这样,请求的接口就是显示什么,请求的就是什么了。接着后端开启一下跨域就OK了。
现在,在研究如果就是需要vue的代理服务来请求接口,请问大佬们,有什么解决方案吗?!
在将若依管理系统Vue项目打包上线时遇到了代理问题。本地开发时,通过proxy设置的dev-api在生产环境中无效,导致接口请求失败。解决办法是在axios中直接配置baseURL,但这样失去了本地开发时的代理优势。寻求使用Vue代理服务同时解决上线问题的大佬指导。

644

被折叠的 条评论
为什么被折叠?



