axios請求問題總結(jié)

一般現(xiàn)在請求接口都會使用axios,方便而且比較簡潔,下面總結(jié)了一套比較通用的請求方法以及報錯機制

代碼如下:

處理一遍數(shù)據(jù)結(jié)構(gòu)的then方法可以根據(jù)業(yè)務情況自行調(diào)整

import Axios from 'axios';
const axios = Axios.create({
    timeout: 200000
})
function ajax(method, url,  params) {
    function r() {
        if (method.toLowerCase() === 'get') {
            return axios.get(url, {
                params,
                headers: {
                    'token': ''
                },
            })
        } else if (method.toLowerCase() === 'post') {
           return axios.post(url, params, {
                headers: {
                    'token': ''
                }
            }) 
        }
    }
    return r().then(res => { /
        const data = res.data
        // 先處理一遍數(shù)據(jù)結(jié)構(gòu)
        if (
            typeof data !== 'object' ||
            typeof data.data === 'undefined' ||
            typeof data.code === 'undefined' ||
            typeof data.msg === 'undefined'
        ) {
            throw `服務端返回數(shù)據(jù)格式不正確`;
        } else {
            return data;
        }
    }).then(data => {
        // 再處理code錯誤碼
        if (data.code !== 0) {
            return Promise.reject(data); // 這個reject會返回給下面的catch 
        } else if (data.code === 0) {
            return data.data;
        }
    }).catch(e => { 
        errorHandler(e);
        throw e; // throw e返回錯誤給調(diào)用的局部catch,去掉的話會返回給局部then
    });
}
// 統(tǒng)一的錯誤報告
function errorHandler(e) {
    let errMsg = '請求出錯!'
    let onClose = () => {}
    let duration = 2000
    if (typeof e === 'string') {
        errMsg = e
    } else if (e.response) {
        const { status } = e.response
        if (!(200 < status && status < 300 || status === 304)) {
            errMsg = '服務器請求超時,請稍后重試';
        }
    } else if (e.code === 200010005) { // code根據(jù)業(yè)務修改
        errMsg = '用戶未登錄';
        duration = 800;
        onClose = () => {
            // 跳轉(zhuǎn)登陸
        }
    } else {
        errMsg = e.msg;
    }
// element UI的組件彈框
    Message({
        type: 'warning',
        message: errMsg,
        duration: duration,
        onClose: onClose
    });
}

export const getData = (url = '', params = {}) => {
    return ajax('get', url, params)
}

export const postData = (url = '', params = {}) => {
    return ajax('post', url, params)
}
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容