axios拦截,api统一管理
Posted liyunlonggg
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了axios拦截,api统一管理相关的知识,希望对你有一定的参考价值。
axios封装
1、项目路径下,引入axios、qs依赖
npm install axios
npm install qs
2、在项目的src路径下新建一个commJs
文件夹,在commJs
文件夹里新建aps.js
和request.js
,api.js
用于写接口,对axios的封装写在request.js里
request.js
import axios from 'axios';
import QS from 'qs';
//自动切换环境
axios.defaults.baseURL = process.env._BASEURL
//设置超时时间
axios.defaults.timeout = 10000;
// post请求头
axios.defaults.headers.post['Content-Type'] = 'application/json;charset=UTF-8'
axios.defaults.withcredentials = true
//请求拦截(请求发出前处理请求)
axios.interceptors.request.use((config) => {
//在发送请求之前如果为post序列化请求参数
if (config.method === 'post') {
config.data = config.data;
}
return config;
}, (error) => {
return Promise.reject(error);
});
// 响应拦截器(处理响应数据)
axios.interceptors.response.use((res) => {
//对响应数据做判断,与后台协议统一接口返回格式
console.log('>>>>>>>response: ', res);
if (res.data.succ != 'ok') { //这个判断可根据实际情况修改
return Promise.reject(res);
}
return res;
}, (error) => {
return Promise.reject(error);
});
// 封装get方法
function get(url, params){
return new Promise((resolve, reject) =>{
axios.get(url, params).then(res =>{
resolve(res.data);
}).catch(err =>{
reject(err.data);
})
});
}
// 封装post方法
function post(url, params){
return new Promise((resolve, reject) =>{
axios.post(url, params).then(res =>{
resolve(res.data);
}).catch(err =>{
reject(err.data);
})
});
}
//对外接口
export function request({method, url, data}){
if(method == 'get'){
return get(url, data);
}else if(method == 'post'){
return post(url, data);
}
}
export default {
install(Vue) {
Vue.prototype.$axios = axios;
Vue.prototype.$request = function () {
return request;
}
}
}
api.js
import {
request
} from './request'
// 列表查询接口
export const getList = (parmas) => {
return request({
url: 'xxx/xxx/xxx',
method: 'post',
data: parmas
})
}
在具体组件调用
//index.vue
import { getList } from "../../comm/js/api.js";
export default {
methods: {
getPage() {
var param = {
currentUser: '',
currentPage: "1",
pageSize: "10"
};
getList(param).then(res => {
if (!res.result.list) {
this.list = [];
} else {
this.list = res.result.list;
}
});
}
}
以上是关于axios拦截,api统一管理的主要内容,如果未能解决你的问题,请参考以下文章