详解webpack的proxyTable无效的解决方案
webpack下配置proxyTable的问题
Vue-cli@2创建的项目,用的webpack,配置了 config/index.js :
module.exports = {
dev: {
// Paths
assetsSubDirectory: 'static',
assetsPublicPath: '/',
proxyTable: {
'/api': {
target: 'http://localhost:9003/',
ws: true,
changOrigin: true,
pathRewrite: {
'^/api': ''
}
}
},
...
}
}
导入了axios:
import axios from 'axios'
Vue.prototype.axios = axios
请求的代码:
login() {
if (this.form.userId === '' || this.form.password === '') {
this.openMessageWarning('用户名和密码不能为空')
return
}
this.axios.post('/test/param1').then((res) => {
console.log("res: ", res)
})
}
改完之后重启了项目,但是控制台显示请求的ip还是本地:
POST http://localhost:8080/test/param1 404 (Not Found)
解决方案
查了一下午的资料,基本上都差不多:
- 检查proxyTable中配置的域名
- 配置 webpack.baseUrl
- 配置完要重启应用才能生效
- 删掉node_modules重建项目
前几个方法都试了,没什么效果。甚至和以前的项目对比了,都没找到什么不同的地方。
最终解决(理解错误)
看了 详解webpack的proxyTable无效的解决方案 ,说可能是缓存的问题,我每次都有清理浏览器的缓存,不知道webpack还有缓存的,然后我尝试着将proxyTable中的端口换了一下,结果…就请求成功了!
POST http://localhost:9004/test/param1 404 (Not Found)
没想到这层原因,在这个问题上卡了一下午,心态崩溃。
正确的解决方案
其实是配置中target配置有问题:
例如后台地址:http://baidu.com/api/user/{userId}
本地项目地址为:http://localhost:8080
//方式一,留空,不写
'/^api': '', //代表你在axios里的请求'/api/info' = http://localhost:54321/info
//方式二,重写
'/^api': 'api/', //代表你在axios里的请求'/api/info' = http://localhost:54321/api/info