vue项目中写拦截器(axios)
作者:互联网
利用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文件
标签:axios,拦截器,return,中写,res,vue,error,config,data 来源: https://www.cnblogs.com/wcx-20151115-hzz/p/14984772.html