利用axios中的request和response写拦截器,方便统一处理项目中后续的接口请求和响应
request.js
import axios from 'axios' import { Message, MessageBox } from 'element-ui' //用于处理请求或响应的提示 import store from '../store' //vuex中存储了token import { getToken } from '@/utils/auth' // 创建axios实例 const service = axios.create({ baseURL: process.env.BASE_API, // api的base_url timeout: 10000 // 请求超时时间10s }) // request拦截器 service.interceptors.request.use(config => { if (store.getters.token) { config.headers['X-Token'] = getToken()
// 让每个请求携带自定义token 请根据实际情况自行修改 } if (config.data !== undefined && config.data !== null) { config.data = removeSpaces(config.data) }
//这个config一定要return出去 return config }, error => { //index.push({path:'/error'}) //请求错误时调用页面 Promise.reject(error) }) // respone拦截器 service.interceptors.response.use( response => { const res = response.data if (res.status !== '200') { if (res.status === '401') { //根据实际处理 } else {
//eg: Message({ message: res.message, type: 'error', duration: 5 * 1000 }) } return Promise.reject('error') } else if (res.errorCode != null) { Message({ message: res.errorCode, type: 'error', duration: 5 * 1000 }) } else { return response.data } }, error => { Message({ message: error.message, type: 'error', duration: 5 * 1000 }) return Promise.reject(error) } )
//清除空格
function removeSpaces(data) {
if (data == null || data === undefined) {
return data
}
if ((typeof data) === 'string') {
return data.trim()
} else if ((typeof data) === 'object') {
for (const i in data) {
data[i] = removeSpaces(data[i])
}
return data
} else {
return data
}
}
export default service
后续的接口封装中,引入这个request.js文件