自用vue axios

import axios from 'axios'
import {getCookie, delCookie} from "../libs/util";
import router from '../router';

axios.defaults.responseType = 'json';
axios.defaults.timeout = 60000;
const baseURL=process.env.NODE_ENV === 'production' ? 'https://admin.intco.cn/' : 'http://192.168.6.166:8080/';
const instance = axios.create({
        baseURL,
        headers: {},
    }
);
const noTokenList = process.env.NODE_ENV === 'production' ?['https://upload.intco.cn/upload/image', 'https://upload.intco.cn/upload/image/batchs',
]:['http://192.168.6.166:8080/uploadImg/upload/image','http://192.168.6.166:8080/uploadImg/upload/image/batchs'];
// request 攔截器
instance.interceptors.request.use(
    config => {
        // Tip: 1
        // 請求開始的時候可以結合 vuex 開啟全屏的 loading 動畫
        // Tip: 2
        // 帶上 token , 可以結合 vuex 或者重 localStorage
        if (!config.noToken) {
            if (getCookie('token') && !noTokenList.includes(config.url)) {
                config.headers['authToken'] = getCookie('token') // 讓每個請求攜帶token--['X-Token']為自定義key 請根據實際情況自行修改
            } else {
                console.log(config)
            }
        }
        // Tip: 3
        // 根據請求方法四啰,序列化傳來的參數糠亩,根據后端需求是否序列化
        // if (config.method.toLocaleLowerCase() === 'post'
        //   || config.method.toLocaleLowerCase() === 'put'
        //   || config.method.toLocaleLowerCase() === 'delete') {
        //   config.data = qs.stringify(config.data)
        // }
        return config
    },
    error => {
        // 請求錯誤時做些事(接口錯誤涮帘、超時等)
        // Tip: 4
        // 關閉loadding
        console.log('request:', error)

        // 1.判斷請求超時
        if (error.code === 'ECONNABORTED' && error.message.indexOf('timeout') !== -1) {
            console.log('根據你設置的timeout/真的請求超時 判斷請求現在超時了瑰剃,你可以在這里加入超時的處理方案')
            // return service.request(originalRequest);//例如再重復請求一次
        }
        // 2.需要重定向到錯誤頁面
        const errorInfo = error.response
        console.log(errorInfo)
        return Promise.reject(error) // 在調用的那邊可以拿到(catch)你想返回的錯誤信息
    }
);

// response 攔截器
instance.interceptors.response.use(
    response => {
        let data;
        // IE9時response.data是undefined撤蚊,因此需要使用response.request.responseText(Stringify后的字符串)
        if (response.data == undefined) {
            data = response.request.responseText
        } else {
            data = response.data
        }

        if (data.status == 505) {
            delCookie('token');
            router.replace({path: '/pages/login'});
        }

        if (response.headers['export-filename']) {
            return response
        } else {
            return data
        }
    },
    err => {
        if (err && err.response) {
            switch (err.response.status) {
                case 400:
                    err.message = '請求錯誤'
                    break

                case 401:
                    err.message = '未授權被辑,請登錄'
                    break

                case 403:
                    err.message = '拒絕訪問'
                    break

                case 404:
                    err.message = `請求地址出錯: ${err.response.config.url}`
                    break

                case 408:
                    err.message = '請求超時';
                    router.replace({path: '/pages/404'});
                    break

                case 500:
                    err.message = '服務器內部錯誤'
                    break

                case 501:
                    err.message = '服務未實現'
                    break

                case 502:
                    err.message = '網關錯誤'
                    break

                case 503:
                    err.message = '服務不可用'
                    break

                case 504:
                    err.message = '網關超時'
                    break

                case 505:
                    err.message = 'HTTP版本不受支持'
                    break

                default:
            }
        }
        if (err.message.includes('timeout')) {
            router.push({path: '/pages/500'});

        }
        return Promise.reject(err) // 返回接口返回的錯誤信息
    }
);
instance.baseURL=baseURL;
export default instance;



?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末纫溃,一起剝皮案震驚了整個濱河市沪羔,隨后出現的幾起案子巍沙,更是在濱河造成了極大的恐慌葵姥,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件句携,死亡現場離奇詭異榔幸,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門削咆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來牍疏,“玉大人,你說我怎么就攤上這事拨齐×墼桑” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵瞻惋,是天一觀的道長厦滤。 經常有香客問我,道長歼狼,這世上最難降的妖魔是什么掏导? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮羽峰,結果婚禮上趟咆,老公的妹妹穿的比我還像新娘。我一直安慰自己梅屉,他們只是感情好忍啸,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著履植,像睡著了一般。 火紅的嫁衣襯著肌膚如雪悄晃。 梳的紋絲不亂的頭發(fā)上玫霎,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天,我揣著相機與錄音妈橄,去河邊找鬼庶近。 笑死,一個胖子當著我的面吹牛眷蚓,可吹牛的內容都是我干的鼻种。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼沙热,長吁一口氣:“原來是場噩夢啊……” “哼叉钥!你這毒婦竟也來了?” 一聲冷哼從身側響起篙贸,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤投队,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后爵川,有當地人在樹林里發(fā)現了一具尸體敷鸦,經...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了扒披。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片值依。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖碟案,靈堂內的尸體忽然破棺而出愿险,到底是詐尸還是另有隱情,我是刑警寧澤蟆淀,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布拯啦,位于F島的核電站,受9級特大地震影響熔任,放射性物質發(fā)生泄漏褒链。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一疑苔、第九天 我趴在偏房一處隱蔽的房頂上張望甫匹。 院中可真熱鬧,春花似錦惦费、人聲如沸兵迅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽恍箭。三九已至,卻和暖如春瞧省,著一層夾襖步出監(jiān)牢的瞬間扯夭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工鞍匾, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留交洗,地道東北人。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓橡淑,卻偏偏與公主長得像构拳,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子梁棠,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354