vue-cli中axios接口的封裝和api接口的管理

一般我們會新建2個文件,request.js用于封裝axios,api用來統(tǒng)一管理我們的接口

request.js(封裝axios)

安裝
npm install axios; // 安裝axios
引入
import axios from 'axios';
環(huán)境的切換

var API_PREFIX = '';
if (process.env.NODE_ENV == 'development') {
    API_PREFIX = '';
}else{
    var idx = location.href.indexOf("/site");
    API_PREFIX = location.href.substr(0,idx)
}
//如果接口地址不是http開頭的
if(options.url.indexOf('http') == -1){
        options.url = API_PREFIX + options.url;
    }
options.method = options.method?options.method:'get';

定義heders

  • 如果存在,則統(tǒng)一在http請求的header都加上token,這樣后臺根據(jù)token判斷你的登錄情況
  • 即使本地存在token,也有可能token是過期的,所以在響應(yīng)攔截器中要對返回狀態(tài)進(jìn)行判斷
   var hearders = {
        'Content-Type': 'application/json'
    };
    if(TOKEN) {
        var hearders = {
            'Content-Type': 'application/json',
            'token': TOKEN,
        };
     }

創(chuàng)建axios實例
axios.create([config])

const instance = axios.create({
            headers: hearders,
            timeout:options.timeout === undefined?5000:options.timeout
        });

封裝get方法和post方法

export default function(options) {
  return new Promise((resolve, reject) => {
        const instance = axios.create({
            headers: hearders,
            timeout: options.timeout === undefined?5000:options.timeout
        });
        instance(options)
            .then(response => { 
                //請求成功后 更新前端token的有效時間
                updateTokenExpire();
                resolve(response.data); 
            })
            .catch(error => {   
                if (error.response) {
                    //api 登錄重試
                    switch (error.response.data.status_code){
                        case 401:
                            if (process.env.NODE_ENV == 'development') {
                                store.commit('set_toast_msg','dev token 失效');
                            }else{
                                //需要登錄
                                //清除當(dāng)前token 信息
                                clearToken(store.state.token.account_id);
                                goLogin();
                            }
                            reject({status_code:401,message:''});
                            return ;
                            break;
                        default:
                            break;
                    }   
                }
                reject(error.response?error.response.data:error);
                

            });
    });
}

api的統(tǒng)一管理

  • 首先我們創(chuàng)建一個api文件夾來管理接口
  • 在api文件夾里面新建一個index.js文件,所有的關(guān)于首頁的接口都房子這個里面
  • 然后我們引入request.js import request from '@/utils/request'
  • 向外暴露接口方法
    -- get方法
export default {
    home:function(){
        return request({
            url:'/api/site/home',
            method:'get',
        });
    },
}

-- post 方法

export default {
    getWxsdk:function(account_id,url){
        return request({
            url:'/api/system/jssdk',
            method:'post',
            data:{
                url:url,
                mid:account_id
            }
        });
    },
}

在頁面中如何調(diào)用

  • 引入接口 import api from '../api/index.js'
  • 調(diào)取接口方法
api.home().then(function(res){
  console.log('success');
}).catch(function(err){
  console.log('error');         
})
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,695評論 19 139
  • 1、axios安裝 1.1、 利用npm安裝npm install axios --save1.2、 利用bowe...
    令武閱讀 6,623評論 1 4
  • 這個月我都三十七歲"高齡"了。假如活到七十歲,儼然已經(jīng)過了一多半了。人生進(jìn)去下半場。上半場基本是在讀書工作結(jié)婚生子...
    雪梨茶閱讀 560評論 0 0
  • 昨日攜夫人觀看了《西虹市首富》發(fā)現(xiàn)自己還是很喜歡這部電影,同時感慨要寫一個不落俗套而又具有啟發(fā)意義的故事真的是很不...
    辰謹(jǐn)和閱讀 443評論 2 0
  • “你叫什么名字?” “叫我文太” “藤原文太?” “嗯” “你的AE86呢?” “會有的?!?/div>
    藤原文太丶閱讀 141評論 0 0

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