Vue 接口管理

春節(jié)臨近竖般,祝大家新年快樂日戈,豬事順利,2019就是盤它~

在vue開發(fā)中总放,會涉及到很多接口的處理侄非,當項目足夠大時俯画,就需要定義規(guī)范統(tǒng)一的接口溉卓,如何定義呢铜异?

方法可能不只一種,本文使用axios+async/await進行接口的統(tǒng)一管理庶喜。

本文使用vue-cli生成的項目舉例小腊。

舉例

拿segmentfault的官網(wǎng)簡單舉個例子,先看一下官網(wǎng):


舉例

看下網(wǎng)站溃卡,腦補一下后臺給出的文檔溢豆,如果后臺不傻的話給出的文檔肯定分模塊的蜒简,假設(shè)后臺給出的文檔分為了以下幾個模塊(假設(shè)的瘸羡,不要較真哈):

  • 資訊模塊 (我的訂閱、熱門資訊)
  • 問答模塊
  • 專欄模塊
  • 講堂模塊
  • 圈子模塊
  • 發(fā)現(xiàn)模塊
  • 個人信息模塊
  • 用戶登錄注冊模塊
  • ...還有其他很多

一般來說搓茬,網(wǎng)站的首頁都是復雜的犹赖,會用到很多其他頁面也會用到的api,所以接口統(tǒng)一管理可以做到api的復用:


模塊劃分

那么如何做呢卷仑?

動手

第一步

在src目錄下新建一個文件夾峻村,我這里叫apis,后臺提供的所有接口都在這里定義:

cd src  // 切換到src目錄
mkdir apis  // 新建apis文件

第二步

按照后臺文檔劃分的模塊新建js文件,這里簡單舉個例子:

  • 資訊模塊: info.js
  • 登錄注冊模塊: member.js
  • 個人信息模塊: userInfo.js
  • ....
cd apis // 切換到apis目錄
type NUL > info.js // 新建js文件
type NUL > member.js 
type NUL > userInfo.js 

現(xiàn)在的目錄大概是這個樣子:

src
    apis
        info.js
        member.js
        userInfo.js
    main.js

第三步

需要引入axios做相應(yīng)的配置锡凝。
在apis下新建一個文件夾粘昨,叫http.js,在里面做axios相應(yīng)的配置窜锯。

type NUL > http.js // 新建http.js文件

配置如下:

 import axios from 'axios'
 // 創(chuàng)建axios的一個實例 
 var instance = axios.create({
    baseURL: xxx,
    timeout: 6000
 })
 // 一张肾、請求攔截器 忽略
 instance.interceptors.request.use(function (config) {
    return config;
 }, function (error) {
    // 對請求錯誤做些什么
    return Promise.reject(error);
 });
 // 二、響應(yīng)攔截器 忽略
 instance.interceptors.response.use(function (response) {
    return response.data;
 }, function (error) {
    // 對響應(yīng)錯誤做點什么
    return Promise.reject(error);
 });
 export default function (method, url, data = null) {
    method = method.toLowerCase();
    if (method === 'post') {
        return instance.post(url, data);
    } else if (method === 'get') {
       return instance.get(url, {params: data});
    } else if (method === 'delete') {
        return instance.delete(url, {params: data});
    } else if (method === 'put') {
        return instance.put(url, data);
    } else {
        console.error('未知的method' + method);
        return false;
    }
}

配置簡要說明一下:

  • 引入axios锚扎,新建了個axios的實例(axios的實例的axios的功能一樣)吞瞪。
  • 請求攔截器響應(yīng)攔截器不是本文重點,略過驾孔。
  • 第30行代碼及以后是重點芍秆,拉出來重點看一下。
 /**
 * 使用es6的export default導出了一個函數(shù)翠勉,導出的函數(shù)代替axios去幫我們請求數(shù)據(jù)妖啥,
 * 函數(shù)的參數(shù)及返回值如下:
 * @param {String} method  請求的方法:get、post对碌、delete迹栓、put
 * @param {String} url     請求的url:
 * @param {Object} data    請求的參數(shù)
 * @returns {Promise}     返回一個promise對象,其實就相當于axios請求數(shù)據(jù)的返回值
 */
 export default function (method, url, data = null) {
    method = method.toLowerCase();
    if (method === 'post') {
        return instance.post(url, data);
    } else if (method === 'get') {
        return instance.get(url, {params: data});
    } else if (method === 'delete') {
        return instance.delete(url, {params: data});
    } else if (method === 'put') {
        return instance.put(url, data);
    } else {
        console.error('未知的method' + method);
        return false;
    }
}

第四步

在apis下面的js文件中引入 http.js導出的函數(shù),拿其中一個文件 member.js說明:

 // member.js 用于定義用戶的登錄克伊、注冊酥郭、注銷等
 import req from './http.js'
 // 定義接口  
 // 在這里定義了一個登陸的接口,把登陸的接口暴露出去給組件使用
 export const LOGIN = params => req('post', '/operator/login', params);
 // 這里使用了箭頭函數(shù)愿吹,轉(zhuǎn)換一下寫法:
 //export const LOGIN=function(req){
 //    return req('post','/operator/login',params)
 //}
 // 定義注冊接口
 export const REG = params => req('post', '/operator/reg', params);
 // 定義注銷接口
 export const LOGOUT = params => req('post', '/operator/logout', params);

第五步

在組件中使用接口不从。
登陸組件 Login.js使用登錄接口:

 //Login.vue
 <template>
    <div>
        <input type='text' v-model='user.userId'>
        <input type='text' v-model='user.pass'>
    </div>
 </template>
 <script>
    // 1. 引入登錄的接口定義
    import {LOGIN} from '../../apis/user.js'
    export default {
        data () {
            return {
                user: {
                    userId: '',
                    pass: ''
                }
            }
        },
        methods: {
          // 2. 定義登錄的邏輯
          async login () {
            // 2.1 awiat LOGIN(this.user) 
              // 等待LOGIN(this.user)執(zhí)行完,
              // 把返回值給userInfo
            let userInfo = await LOGIN(this.user);
            // 2.2假設(shè)登錄成功,返回的數(shù)據(jù)應(yīng)該是 
                // userInfo = {code:200, msg: 'success', data: {token:'xxxxx'}}
                // 然后根據(jù)返回的數(shù)據(jù)做相應(yīng)的處理,比如儲存token
          } 
        },
        mounted () {
            //3. 執(zhí)行登錄
            this.login();
        }
    }
</script>

第六步

這樣定義接口雖然看起來麻煩點犁跪,但有以下幾個好處:

  • 代碼看起來規(guī)范椿息,所有的接口都在一個文件夾定義,不用分散的各個組件坷衍,維護起來簡單寝优,例如后臺的一些url變了,改起來也方便枫耳。
  • 可以做到接口一次定義乏矾,到處使用。

例如首頁使用了很多api:

 // index.js  首頁的js文件
 import {GET_USER_INFO} from 'apis/userInfo.js'  // 用戶信息
 import {GET_CURRENT_INFO, GET_HOT_INFO} from 'apis/info.js' // 熱門資訊 最新資訊
 import {GET_HOT_LECTRUE} from 'apis/lectrue.js' // 講座推薦

用戶界面也會用到用戶信息api:

 // userInfo.js用戶信息頁面
 import {GET_USER_INFO} from 'apis/userInfo.js'  // 用戶信息

關(guān)注公眾號【grain先森】迁杨,回復關(guān)鍵詞 【18福利】钻心,獲取為你準備的年終福利,更多關(guān)鍵詞玩法期待你的探索~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末铅协,一起剝皮案震驚了整個濱河市捷沸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌狐史,老刑警劉巖痒给,帶你破解...
    沈念sama閱讀 221,406評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異骏全,居然都是意外死亡苍柏,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評論 3 398
  • 文/潘曉璐 我一進店門吟温,熙熙樓的掌柜王于貴愁眉苦臉地迎上來序仙,“玉大人,你說我怎么就攤上這事鲁豪∨说浚” “怎么了?”我有些...
    開封第一講書人閱讀 167,815評論 0 360
  • 文/不壞的土叔 我叫張陵爬橡,是天一觀的道長治唤。 經(jīng)常有香客問我,道長糙申,這世上最難降的妖魔是什么宾添? 我笑而不...
    開封第一講書人閱讀 59,537評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上缕陕,老公的妹妹穿的比我還像新娘粱锐。我一直安慰自己,他們只是感情好扛邑,可當我...
    茶點故事閱讀 68,536評論 6 397
  • 文/花漫 我一把揭開白布怜浅。 她就那樣靜靜地躺著,像睡著了一般蔬崩。 火紅的嫁衣襯著肌膚如雪恶座。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,184評論 1 308
  • 那天沥阳,我揣著相機與錄音跨琳,去河邊找鬼。 笑死桐罕,一個胖子當著我的面吹牛脉让,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播冈绊,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼侠鳄,長吁一口氣:“原來是場噩夢啊……” “哼埠啃!你這毒婦竟也來了死宣?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,668評論 0 276
  • 序言:老撾萬榮一對情侶失蹤碴开,失蹤者是張志新(化名)和其女友劉穎毅该,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體潦牛,經(jīng)...
    沈念sama閱讀 46,212評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡眶掌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,299評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了巴碗。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片朴爬。...
    茶點故事閱讀 40,438評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖橡淆,靈堂內(nèi)的尸體忽然破棺而出召噩,到底是詐尸還是另有隱情,我是刑警寧澤逸爵,帶...
    沈念sama閱讀 36,128評論 5 349
  • 正文 年R本政府宣布具滴,位于F島的核電站,受9級特大地震影響师倔,放射性物質(zhì)發(fā)生泄漏构韵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,807評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望疲恢。 院中可真熱鬧凶朗,春花似錦、人聲如沸显拳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽萎攒。三九已至遇八,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間耍休,已是汗流浹背刃永。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留羊精,地道東北人斯够。 一個月前我還...
    沈念sama閱讀 48,827評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像喧锦,于是被迫代替她去往敵國和親读规。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,446評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 我們所要的說的axios的封裝和api接口的統(tǒng)一管理燃少,其實主要目的就是在幫助我們簡化代碼和利于后期的更新維護束亏。 一...
    kangaroo_v閱讀 8,435評論 1 67
  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 31,947評論 2 89
  • 生命陪伴心語系統(tǒng): (當下)此刻就是我享受愛,體驗愛和表達愛的最大機會 (過程)深呼吸一阵具,二碍遍,三,我看見了我的情緒...
    洪蕓閱讀 204評論 0 6
  • 腳下的蟲子 奏響了黑夜 不分白晝的蟬鳴 讓夏天變的不孤單 明亮的星從你的世界照過來 點燃了我蠢蠢欲動的心 從一個地...
    史秀閱讀 368評論 1 7
  • 熱水將冷杯填滿 騰出熾熱的溫暖 將手的寒冷驅(qū)散 然后淡淡地消阳液、緩緩地逝 在空中淡成霧怕敬、化成煙 似笑過后的睡夢 露出...
    汩月閱讀 177評論 0 0