使用axios進行apiService的封裝

前言:

最近在進行項目前端架構(gòu)的過程中白胀,一直在想如何封裝異步請求的apiService椭赋,達到更規(guī)范的應(yīng)用和更簡便的書寫。剛開始想使用定義抽象類的方式進行書寫或杠,后面發(fā)現(xiàn)不可行哪怔,并不能達到自己想象的減少代碼量,并且能保持很強的重用性向抢。最后想到使用構(gòu)造函數(shù)的方式進行封裝认境。具體代碼實現(xiàn)如下:

一、攔截器的代碼實現(xiàn):

import axios from 'axios'

// 創(chuàng)建axios實例
const service = axios.create({
  // baseURL: process.env.BASE_API, // api的base_url
  timeout: 30000 // 請求超時時間
});

// request攔截器
service.interceptors.request.use(config => {
  //此處進行token等數(shù)據(jù)處理
  return config
}, error => {
  // Do something with request error
  Promise.reject(error)
});

// respone攔截器
service.interceptors.response.use(
  response => {
    const res = response.data;
    if (res.code !== 200) {
      //此處進行異常處理
      return Promise.reject(res);
    }
    return response
  },
  error => {
    //此處進行異常處理
    return Promise.reject(error)
  }
);

export default service

首先實現(xiàn)攔截器的配置挟鸠,對項目實際使用時的錯誤提示叉信、token的綁定進行統(tǒng)一處理

二、apiService的構(gòu)造函數(shù)實現(xiàn)

import request from './request'

export class ApiService {
  constructor(url) {
    this.baseUrl = url;
  }

  //獲取列表數(shù)據(jù)
  list(query) {
    return request({
      url: this.baseUrl + '/list',
      method: 'get',
      params: query
    })
  }

  //新增數(shù)據(jù)
  create(data) {
    return request({
      url: this.baseUrl + '/create',
      method: 'post',
      data: data
    })
  }

  //修改數(shù)據(jù)
  update(data) {
    return request({
      url: this.baseUrl + '/update',
      method: 'put',
      data: data
    })
  }

  //刪除數(shù)據(jù)
  delete(id) {
    return request({
      url: this.baseUrl + '/delete/' + id,
      method: 'delete'
    })
  }

  //獲取數(shù)據(jù)詳情
  view(id) {
    return request({
      url: this.baseUrl + '/view/' + id,
      method: 'get'
    })
  }
}

在實際使用時艘希,僅需定義如userApiService硼身,代碼如下:

import {ApiService} from './apiService'

export const UserApiService = new ApiService('/user');

在實際使用頁面中鉴未,引用UserApiService ,就可以調(diào)用list鸠姨、create铜秆、update、delete讶迁、view等方法了连茧。當然,實際使用中會有自己的特殊需求巍糯,如提交等請求啸驯,需要特殊的url拼接。但是祟峦,總的來說前后端一定遵循公司內(nèi)部規(guī)范罚斗,用這樣的寫法可以達到較少的代碼量實現(xiàn)較高的復用性。
最后宅楞,希望大家有更好的實現(xiàn)方案可以在評論中告知针姿,互相進步學習。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末厌衙,一起剝皮案震驚了整個濱河市距淫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌婶希,老刑警劉巖榕暇,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異喻杈,居然都是意外死亡彤枢,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門筒饰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來缴啡,“玉大人,你說我怎么就攤上這事龄砰∶瞬” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵换棚,是天一觀的道長式镐。 經(jīng)常有香客問我,道長固蚤,這世上最難降的妖魔是什么娘汞? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮夕玩,結(jié)果婚禮上你弦,老公的妹妹穿的比我還像新娘惊豺。我一直安慰自己,他們只是感情好禽作,可當我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布尸昧。 她就那樣靜靜地躺著,像睡著了一般旷偿。 火紅的嫁衣襯著肌膚如雪烹俗。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天萍程,我揣著相機與錄音幢妄,去河邊找鬼。 笑死茫负,一個胖子當著我的面吹牛蕉鸳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播忍法,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼潮尝,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了缔赠?” 一聲冷哼從身側(cè)響起衍锚,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤友题,失蹤者是張志新(化名)和其女友劉穎嗤堰,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體度宦,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡踢匣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了戈抄。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片离唬。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖划鸽,靈堂內(nèi)的尸體忽然破棺而出输莺,到底是詐尸還是另有隱情,我是刑警寧澤裸诽,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布嫂用,位于F島的核電站,受9級特大地震影響丈冬,放射性物質(zhì)發(fā)生泄漏嘱函。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一埂蕊、第九天 我趴在偏房一處隱蔽的房頂上張望往弓。 院中可真熱鬧疏唾,春花似錦、人聲如沸函似。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽撇寞。三九已至准给,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間重抖,已是汗流浹背露氮。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留钟沛,地道東北人畔规。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像恨统,于是被迫代替她去往敵國和親叁扫。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,864評論 2 354