前置条件: 本地启动的: 前端,端口:8080 后端,端口:10000 需求: 在每次请求时我把token放在请求头中,就考虑到在请求拦截器里面进行设置,设置代码如下:
axios.defaults.baseURL = "http://localhost:10000"
axios.interceptors.request.use(config => {
config.headers.token = 'token'
return config
}, error => {
console.log(`err`, error)
})
请求接口如下:
axios("/article/articleType")
报错信息如下: 说是跨域了;后端也设置阻止跨域了,代码如下:
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With,token");
res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
res.header("Access-Control-Allow-Credentials", true);
但还是莫名奇妙的报错; 于是想到了使用代理, 在vue项目里面使用代理的时候,需要看清是vue脚手架还是webpack脚手架,网上说vue脚手架配置在vue.config.js,webpack配置在webpack.config.js里面 我使用的是vue的,版本是3的
然后配置,配置的时候和网上的一样,下面参考了一下网上的,我在上面做了改动,改动的地方就是我出问题的地方:
axio配置参数修改:
axios.defaults.baseURL = "/api"
axios.interceptors.request.use(config => {
config.headers.token = 'token'
return config
}, error => {
console.log(`err`, error)
})
vue.config.js修改
module.exports = {
devServer:{
proxy:{
'/api':{
target: 'http://localhost:10000',
changeOrigin: true,
pathRewrite: {
'^/api': '/'
}
}}
},
上面的配置就是我在vue.config.js里面配置的,然后他不起作用,找遍全网,没找到解决办法,思想盯在了vue设置代理无效,axios设置拦截器跨域这两个问题上。一直在找… … … … … 就在早上看到了一篇文章,https://bbs.csdn.net/topics/395553952,然后去试着改了,发现成功了。
总结: 排查的时候需要以下注意点:
- 注意每个版本不同
- 找官方的使用方法
- 找网上的使用例子
- 如果结构一致,那就从细枝末节开始对比(比如这里的target,他的值应该怎么写)
疑问: 我成功测试之后发现axios的拦截器设置了token,然后打印了config;
请求的接口是http://localhost:8080/api/article/articleType
从发起请求,在前端最后经过处理的是代理?
|