每天一个报错,个各不相同。
看见下面的这行报错是不是感觉跟熟悉?
没错,vue的跨域问题,记录一下我的解决方法并分享给大家 ~ . ~
Response to preflight request doesn’t pass access control check: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.
那就直接上代码?
module.exports = {
devServer: {
open: true,
host: 'localhost',
port: 8080,
https: false,
proxy: {
'/api': {
target: 'http://11111111111.com',
ws: true,
changOrigin: true,
pathRewrite: {
'^/api': ''
}
}
}
}
}
我的vue文件中没有config文件夹,所以新建了个vue.config.js文件,放在根路径就好。
需要跨域的页面
mounted(){
this.job()
},
methods:{
job(){
post("/api/index.php/user/index/postList",{
token:"",
page: this.page,
count: this.count,
type: this.type,
})
.then((res) => {
console.log(res);
})
.catch(function (err) {
console.log("请求失败");
});
},
},
然后信心满满的重启项目,再次运行,还是报错…
仔细找了一遍,发现封装axios的文件里面加了baseURL,会在发送请求时自动拼接到url的头部
const instance = axios.create({
timeout: 5000,
headers: {
"Content-Type": "application/json;charset=utf-8",
},
});
将这一行注释掉,重启项目,拿到数据。
以下是我axios的封装(以防万一某些小伙伴复制代码运行不了 > . < )
import axios from "axios";
const instance = axios.create({
timeout: 5000,
headers: {
"Content-Type": "application/json;charset=utf-8",
},
});
axios.defaults.withCredentials = true;
if (process.env.NODE_ENV === "production") {
if (process.env.VUE_APP_FLAG === "pro") {
axios.defaults.baseURL = "http://localhost:8080";
} else {
axios.defaults.baseURL = "";
}
} else {
axios.defaults.baseURL = "http://localhost:8080";
}
instance.interceptors.request.use(
function (config) {
console.log("全局请求拦截");
console.log(config);
return config;
},
function (err) {
return Promise.reject(err);
}
);
instance.interceptors.response.use(
(response) => {
if (response.status === 200) {
return Promise.resolve(response);
} else {
return Promise.reject(response);
}
},
(error) => {
if (error.response.status) {
switch (error.response.status) {
case 401:
router.replace({
path: "/login",
query: {
redirect: router.currentRoute.fullPath,
},
});
break;
case 403:
this.$message("管理员权限已修改请重新登录");
setTimeout(() => {
router.replace({
path: "/login",
query: {
redirect: router.currentRoute.fullPath,
},
});
}, 1000);
break;
case 404:
this.$message("请求页面飞到火星去了");
break;
}
return Promise.reject(error.response);
}
}
);
export function get(url, params) {
return instance.get(url, {
params,
});
}
export function post(url, data) {
return instance.post(url, data);
}
记得在需要调用的页面引入噢
import { post } from "../../utils/request";
技术不太好,见笑了哈,大家分享问题,一起共同成长。