通用axios配置 ??

前言

如今網(wǎng)頁中充斥著各種各樣的請求据沈,在幾年前哟沫,我還沒畢業(yè)的時候,我只知道ajax锌介,也一直在用JQ的$ajax發(fā)送請求嗜诀。畢業(yè)之后接觸到了axios,仿佛打開了新世界的大門孔祸。不得不說裹虫,這個插件把http請求封裝得非常好。先進(jìn)入正題融击,配置一個較為通用的axios請求類


思路

封裝一個類筑公,個性化實(shí)現(xiàn)請求

預(yù)備工作

  • 了解常用請求(get, post, put ,delete)
  • 了解Promise
  • 了解請求體結(jié)構(gòu)
  • 重點(diǎn) 了解axios

代碼

import axios from 'axios'
import qs from 'qs'

class AxiosInterceptor {
  constructor() {
    this.client = this.getAxiosClient()
  }
  get(url = '', params = {}) {
    const option = {
      url,
      params,
      method: 'get'
    }
    return this.request(option)
  }
  post(url = '', data = {}, type = 'x-www-form-urlencoded') {
    const option = {
      url,
      method: 'post',
      headers: {
        'Content-Type': 'application/x-www-urlencoded;charset=UTF-8'
      }
    }
    if (type === 'json') { // json
      option.headers['Content-Type'] = 'application/json;charset=UTF-8'
      option.data = data
    } else if (type === 'form-data') { // 文件
      option.headers['Content-Type'] = 'multipart/form-data;charset=UTF-8'
      const form = new FormData()
      for (let key in data) {
        let value = data[key]
        form.append(key, value)
      }
      option.data = form
    } else { // 表單
      option.data = qs.stringify(data)
    }
    return this.request(option)
  }
  put(url = '', data = '') {
    const option = {
      url,
      data,
      headers: {
        'Content-Type': ''
      },
      method: 'put'
    }
    return this.request(option)
  }
  delete(url = '', data = {}) {
    const option = {
      url,
      data,
      method: 'delete',
      headers: {
        'Content-Type': 'application/json'
      }
    }
    return this.request(option)
  }

  getAxiosClient() {
    let axiosClient = axios.create(this.axiosConfig)
    // 在請求或響應(yīng)被 then 或 catch 處理前攔截它們。
    // 響應(yīng)攔截器
    axiosClient.interceptors.response.use(res => {
      if (res.data === '') {
        // return '文件上傳成功'
      }
      return Promise.resolve(res.data)
    }, err => {
      // 對錯誤進(jìn)行處理
      return Promise.reject(err)
    })
    // 請求攔截器 ( 可以在這里配置token相關(guān)的攔截)
    axiosClient.interceptors.request.use()

    return axiosClient
  }

  axiosConfig = {
    baseUrl: 'prefix', // 若請求url不是絕對路徑尊浪, 會把baseUrl添加到請求url前面
    timeout: 10000, // 如果請求話費(fèi)了超過 `timeout` 的時間匣屡,請求將被中斷
  }
  request(option) {
    return this.client.request(option)
  }
}

至此, 一個大致通用的axios攔截器配置完成拇涤。

思考題 ??

Promise.resolve(data)

請問捣作,這句代碼的意義?
看官如果知道就最好了鹅士,如果不知道券躁,請看文末

總結(jié) ??

這里我沒有配置請求攔截器,因為我目前做的項目里面還沒有涉及到token掉盅。網(wǎng)上可以搜到很多相關(guān)配置也拜。
代碼是手巧的,因為公司內(nèi)網(wǎng)開發(fā)趾痘,項目代碼拿不到慢哈, 回到家里自己回想敲粗來的代碼,可能會有一些出入永票,應(yīng)該沒有大問題卵贱。
感謝閱讀滥沫!

思考題解答 ??

思路: 先在瀏覽器打印一下Promise.resolve(1), 看看結(jié)果

promise

可以看到键俱,結(jié)果是一個Promise對象兰绣。并且繼承了 Promise的一些方法,我們可以用一下里面的方法编振。

var pm = Promise.resolve(1)

pm.then(res => {
  console.log(res) // 1
})

看到這里缀辩,是不是發(fā)現(xiàn)跟咱們 new 一個 Promise對象的使用方法是一樣的? ??

// 這里就是思考題的答案了 
var pm = new Promise((resolve, reject)=>{
  var data = 1
  resolve(data)
})

pm.then(res=>{
  console.log(res) // 1
})

?? 注意事項

使用了 Promise.reject 后党觅, 必須 catch 這個 reject

var pm = Promise.reject(1)
pm.catch(err=>{
  ...
})

題外話 ??

再說說雌澄,咱們平時都是new Promise()對象斋泄, 為啥直接 Promise.resolve() 也可以用呢杯瞻?

promise

原來 Promise這個構(gòu)造函數(shù)中就帶了一些方法, 比如 all炫掐,resolve魁莉,reject 等等

感謝閱讀 ??

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市募胃,隨后出現(xiàn)的幾起案子旗唁,更是在濱河造成了極大的恐慌,老刑警劉巖痹束,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件检疫,死亡現(xiàn)場離奇詭異,居然都是意外死亡祷嘶,警方通過查閱死者的電腦和手機(jī)屎媳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來论巍,“玉大人烛谊,你說我怎么就攤上這事〖翁” “怎么了丹禀?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長鞋怀。 經(jīng)常有香客問我双泪,道長,這世上最難降的妖魔是什么密似? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任攒读,我火速辦了婚禮,結(jié)果婚禮上辛友,老公的妹妹穿的比我還像新娘薄扁。我一直安慰自己剪返,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布邓梅。 她就那樣靜靜地躺著脱盲,像睡著了一般。 火紅的嫁衣襯著肌膚如雪日缨。 梳的紋絲不亂的頭發(fā)上钱反,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天,我揣著相機(jī)與錄音匣距,去河邊找鬼面哥。 笑死,一個胖子當(dāng)著我的面吹牛毅待,可吹牛的內(nèi)容都是我干的尚卫。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼尸红,長吁一口氣:“原來是場噩夢啊……” “哼吱涉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起外里,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤怎爵,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后盅蝗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鳖链,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年墩莫,在試婚紗的時候發(fā)現(xiàn)自己被綠了芙委。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡贼穆,死狀恐怖题山,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情故痊,我是刑警寧澤顶瞳,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站愕秫,受9級特大地震影響慨菱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜戴甩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一符喝、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧甜孤,春花似錦协饲、人聲如沸畏腕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽描馅。三九已至,卻和暖如春而线,著一層夾襖步出監(jiān)牢的瞬間铭污,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工膀篮, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留嘹狞,地道東北人。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓誓竿,卻偏偏與公主長得像磅网,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子烤黍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評論 2 354

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

  • Axios是一個基于Promise的HTTP請求庫知市,可以用在瀏覽器和Node.js中傻盟。平時在Vue項目中速蕊,經(jīng)常使用...
    多啦斯基周閱讀 877評論 0 0
  • Promise 對象 Promise 的含義 Promise 是異步編程的一種解決方案,比傳統(tǒng)的解決方案——回調(diào)函...
    neromous閱讀 8,706評論 1 56
  • ## 框架和庫的區(qū)別?> 框架(framework):一套完整的軟件設(shè)計架構(gòu)和**解決方案**娘赴。> > 庫(lib...
    Rui_bdad閱讀 2,907評論 1 4
  • Axios是近幾年非彻嬲埽火的HTTP請求庫,官網(wǎng)上介紹Axios 是一個基于 promise 的 HTTP 庫诽表,可以...
    milletmi閱讀 3,502評論 0 9
  • 我們在實(shí)際的Vue項目中經(jīng)常需要與后端進(jìn)行數(shù)據(jù)交互唉锌,但是在很大程度上我們需要用到這個插件,但是這里需要注意的一點(diǎn)是...
    Marin_chen閱讀 11,004評論 0 5