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文件

原文地址:https://www.cnblogs.com/wcx-20151115-hzz/p/14984772.html