axios常用接口封装

import axios from 'axios';
import qs from "qs";
import api from './url.js';
import { Message, Loading } from 'element-ui';
 
// 请求地址
var baseURL = api.baseURL;   //环境地址
var token = '12345679'; // 企业端token
 
let instance = axios.create({ // 初始化axios
    baseURL,
    headers: {
        "Content-Type": "application/x-www-form-urlencoded;charset=utf-8",
    },
    timeout: 20000, // request timeout,
});
 
let cancel, promiseArr = {};
instance.interceptors.request.use(function(config) { // 请求拦截
    // 为了防止重复请求ajax
    if (promiseArr[config.url]) {
        promiseArr[config.url] = cancel
    } else {
        promiseArr[config.url] = cancel
    }
    config.headers['token'] = token; // 设置token
    return config;
}, function(error) {
    Message({message: '请求拦截错误:' + error, type: 'error'});
    return Promise.reject(error);
});
 
instance.interceptors.response.use(function(response) { // 响应拦截
    return response;
}, function(error) {
    Message({message: '响应拦截错误:' + error, type: 'error'});
    return Promise.reject(error);
});
 
 
function correct (resolve, res) { // 正常返回
    if (res.data.code == 0) {
        resolve(res.data);
    } else { // 错误返回
        Message({message: '请求错误:' + res.data.msg, type: 'error'});
    }
}
 
function error (reject, err) { // 错误返回
    Message({message: '请求错误:' + err, type: 'error'});
    reject(err);
}
 
export default {
    post: (url, params = {}, qr = true, json = false) => { // post 请求
        let loadingInstance = Loading.service({ fullscreen: true });
        params = qr ? qs.stringify(params) : params; // 序列化的参数
        json && (instance.defaults.headers['Content-Type'] = 'application/json'); // json格式的参数
        return new Promise((resolve, reject) => {
            instance.post(api[url], (params))
            .then(res => {
                correct(resolve, res);
                loadingInstance.close();
            })
            .catch(err => {
                error(reject, err);
            });
        });
    },
     
    get: (url, params = {}) => { // get 请求
        return new Promise((resolve, reject) => {
            let loadingInstance = Loading.service({ fullscreen: true });
            instance.get(api[url], { params })
            .then(res => {
                correct(resolve, res);
                loadingInstance.close();
            })
            .catch(err => {
                error(reject, err);
            });
        });
    },
     
    file: (url, params) => { // formdata 表单上传
        return new Promise((resolve, reject) => {
            instance.defaults.headers['Content-Type'] = 'multipart/form-data';
            instance.post(api[url], (params))
            .then(res => {
                correct(resolve, res);
            })
            .catch(err => {
                error(reject, err);
            });
        });
    },
 
    url: (url) => { // 返回url
        return url ? baseURL + api[url] : baseURL
    },
 
    token: (data) => { // 切换token
        focuser = token;
        token = data;
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。