axios的二次封装(Vue)
api.js
import {get, post} from "./index";
/**
* 用户接口
* @param data
* @returns {AxiosPromise}
*/
export const userApi = {
/**
* 登录
* @param data
* @returns {AxiosPromise}
*/
login(data) {
return post('/login.php', {
data
}).then((res) => {
if (res.ret === 200) {
localStorage.setItem('userInfo', JSON.stringify(res.data));
return Promise.resolve(res);
} else {
this.$swal({
title: "账号或密码错误!",
icon: "error",
});
}
}).catch(() => {
})
},
}
index.js
import instance from "./instance";
function get(url, options){
return instance({
method: "get",
url,
...options
})
}
function post(url,options){
return instance({
method: "post",
url,
...options
})
}
export {
get,
post,
}
instance.js
import Vue from "vue";
import axios from "axios";
import Qs from 'qs'
Vue.prototype.$http=axios;
const instance = axios.create({
// baseURL: 'https://some-domain.com/api/',
timeout: 10000,
headers: {
post:{
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
}
},
transformRequest: [function (data) {
// 对发送的 data 进行任意转换处理
let params = null;
if (data instanceof FormData || data instanceof URLSearchParams) {
params = data;
} else {
params = Qs.stringify(data);
// console.log(data);
}
return params;
}],
});
// 添加请求拦截器
instance.interceptors.request.use(function (config) {
let userInfo = null;
//动态获取请求头并赋值
if (localStorage.getItem("userInfo")) {
userInfo = JSON.parse(localStorage.getItem("userInfo"));
config.headers.phone=userInfo.phone;
config.headers.token=userInfo.token;
}
// 在发送请求之前做些什么
// console.log(config.url);
return config;
}, function (error) {
// 对请求错误做些什么
return Promise.reject(error);
});
// 添加响应拦截器
instance.interceptors.response.use(function (response) {
let data = null;
if (response.data.ret === 200) {
data = response.data;
} else {
data = response.data.msg;
}
// console.log(response);
return data;
}, function (error) {
console.dir(error.message);
return Promise.reject(error.message);
});
// axios.defaults.baseURL='';
export default instance