axios 簡單化

為什么選擇axios?

1.使用axios可以統(tǒng)一做請求-響應(yīng)攔截,例如響應(yīng)時(shí)我們將響應(yīng)信息攔截起來,判斷狀態(tài)碼,從而彈出報(bào)錯(cuò)信息
2.設(shè)定請求超時(shí),例如3000ms未響應(yīng)則停止請求
3.基于promise,可以很方便地使用then或者catch來處理請求
4.自動(dòng)轉(zhuǎn)換json數(shù)據(jù)
4.等等

代碼如下

import axios, { AxiosRequestConfig } from 'axios';
import qs from 'qs';
import { getToken, removeToken } from '@/utils/common';
import { Message, Loading } from 'element-ui';
import router from '@/router/index';
console.log(process.env.VUE_APP_BASE_API)
const service = axios.create({
    baseURL: process.env.VUE_APP_BASE_API, //完整的URL =   baseURL + url  
    timeout: 20000,
    withCredentials: true,
    headers: {
        'X-Requested-With': 'XMLHttpRequest',
        'Content-Type': 'application/x-www-form-urlencoded',
    }
})
let loadinginstace: any;
// 請求攔截器
service.interceptors.request.use((config: AxiosRequestConfig) => {
    const token = getToken();
    loadinginstace = Loading.service({
        fullscreen: true, lock: true,
        text: '加載中',
        spinner: 'el-icon-loading',
        background: 'rgba(0, 0, 0, 0.7)'
    })
    token && (config.headers.Authorization = token);
    return config;
}, (error: any) => {
    console.log(error)
    loadinginstace.close();

    return Promise.reject(error);
});

// 響應(yīng)攔截器
service.interceptors.response.use(
    response => {
        //console.log(response)
        loadinginstace.close();
        if (response.status === 200) {
            return Promise.resolve(response);
        } else {
            return Promise.reject(response);
        }
    }, error => {
        loadinginstace.close();
        if (error.message.includes('timeout')) {
            console.log("錯(cuò)誤")
            Message.error({
                showClose: true,
                message: '請檢查網(wǎng)絡(luò)再重新連接',
            });
            return Promise.reject('請檢查網(wǎng)絡(luò)再重新連接');
        } else if (error && error.response.status) {
            switch (error.response.status) {
                case 401:
                    router.replace({
                        path: '/login',
                        query: { redirect: router.currentRoute.fullPath }
                    });
                    break;
                case 403:
                    Message.error({
                        showClose: true,
                        message: '登錄過期,請重新登錄',
                    });
                    removeToken()

                    setTimeout(() => {
                        router.replace({
                            path: '/login',
                            query: {
                                redirect: router.currentRoute.fullPath
                            }
                        });
                    }, 1000);
                    break;
                case 404:
                    Message.error({
                        showClose: true,
                        message: '網(wǎng)絡(luò)請求不存在',
                    });
                    setTimeout(() => {
                        router.replace({
                            path: '/404',
                            query: {
                                redirect: router.currentRoute.fullPath
                            }
                        });
                    }, 1000);
                    break;
                default:
                    Message.error({
                        showClose: true,
                        message: error.response.data.message,
                    });
                    return Promise.reject(error.response);
            }
        }



    }
)


// 請求方式的配置

export const post = (url: any, data?: any) => {  //  post
    return new Promise((resolve: any, reject: any) => {
        service({
            method: 'post',
            url,
            data: qs.stringify(data),
        }).then(
            res => {
                //console.log(res)
                return resolve(res.data);
            }
        ).catch(err => {
            reject(err.data)
        })
    })

}
export const get = (url: any, params?: any) => {  // get
    return new Promise((resolve: any, reject: any) => {
        service({
            method: 'get',
            url,
            params, // get 請求時(shí)帶的參數(shù)
        })
            .then(res => {
                resolve(res.data);
            })
            .catch(err => {
                reject(err.data)
            })
    })

}


使用如下

import { post ,get} from "@/utils/http";
const aaa:(data: Porject.AddProjectType) => Promise<any> = async (data: Porject.AddProjectType): Promise<any> => {
    return post(
        "/project/add_project",
        data
    )
}


const bbb= (uuid:number) => {
    return get("/task/sectiontask",{puuid:uuid})    
}

多多指教 bye~~~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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