Vue使用——axios封装


背景

  • 在前端Vue项目中,需要自定义axios请求拦截器。

配置

  • 建立js文件:axiosUtil.js,文件内容如下
import axios from 'axios';
import ElementUI from 'element-ui';
const service = axios.create({
    // baseURL: 'https://www.easy-mock.com/mock/test',
    timeout: 200000
});

// 请求拦截器
service.interceptors.request.use(
    config => {
        console.log('config', config)
        // 在发送请求之前做些什么
        return config;
    },
    error => {
        console.log(error);
        return Promise.reject();
    }
);

//响应拦截器
service.interceptors.response.use(
    response => {
        console.log(response)
        const res = response.data
        // 200是自定义的状态码,根据实际情况定义
        if (res.statusCode !== 200) {
            Message({
                message: res.message || 'Error',
                type: 'error',
                duration: 5 * 1000
            })

            /* 此处还可以写一些其他的逻辑处理 */
            return Promise.reject(new Error(res.message || 'Error'))
        } else {
            return res
        }
    },
    error => {
        console.log('err' + error)
        Message({
            message: error.message,
            type: 'error',
            duration: 5 * 1000
        })
        return Promise.reject(error)
    }
)

export default service;
  • 封装api,使用axiosUtil.js进行接口封装(举例:farmApi.js)
import axios from 'axios';
import base from './base.js';
import storage from '../utils/storage.js';
import axiosUtil from '../utils/axiosUtil.js';/**
 * 增加农场
 * @param {*} data 
 * @returns 
 */
export const addFarm = (data) => {
    return axiosUtil({
        method: 'post',
        url: base.mms + '/farm/save',
        data: data,
        headers: {token:storage.get('token')}
    })
}

/**
 * 删除农场
 * @param {*} data 
 * @returns 
 */
export const delFarm = (data) => {
    return axiosUtil({
        method: 'get',
        url: base.mms + '/farm/delete',
        params: data,
     headers: {token:storage.get('token')}
  }) 
}
  • 使用api,进行接口调用