Tips on axios

什么是 axios

  • axios 是一個基于 Promise 的,為瀏覽器和 Node.js 設(shè)計的 HTTP 客戶端宇攻。它盡可能簡化封裝了 HTTP 相關(guān)的各種操作叹哭,在 Web App 中使用非常方便晰绎。
  • Vue 2 官方建議在由 Vue 構(gòu)建的 SPA 中使用 axios 進行 HTTP 操作彼硫。
  • 傳送門:mzabriskie/axios

基本用法

  • 初始化一個 axios 實例

    const ajaxInstance = axios.create({
        baseURL: url,
        timeout: 30000 // 30 seconds.
    });
    
  • GET .get(url, [conf])

    ajaxInstance.get('/job/joblist', {
        params: {
            user: store.state.auth.username
        }
    }).then((response) => {
        if (response.status === 200) {
            return true;
        } else {
            console.log(response.status);
            return false;
        }
    }).catch((error) => {
        console.error(error);
        return false;
    });
    
  • POST Params .post(url, [data, [conf]])

    ajaxInstance.post('/auth/userLogin', {}, {
        params: {
            username: user.username,
            password: user.password
        },
    }).then((response) => {
        // if auth success. then ->
        console.log(response); // for test only
        console.log(response.data.Login;
        if((response.data.Login === 0)) { // login success
            return true;
        } else {
            return false;
        }
    }).catch((error) => {
        console.error(error);
        return false;
    });
    
  • POST JSON

    ajaxInstance.post('/auth/userLogin', {
        username: '',
        password: ''
    }).then((response) => {
        // if auth success. then ->
        console.log(response); // for test only
        console.log(response.data.Login;
        if((response.data.Login === 0)) { // login success
            return true;
        } else {
            return false;
        }
    }).catch((error) => {
        console.error(error);
        return false;
    });
    
  • POST 表單( FormData )

    let data = new FormData();
    data.append('upload_file', file);
    data.append('path', store.state.dataPreview.path);
    data.append('user', store.state.auth.username);
    return ajaxInstance.post('/action/upload', data).then((response) => {
        if (response.data === 'success') {
            return true;
        } else {
            console.log(response.data);
            return false;        
        }
    }).catch((error) => {
        console.error(error);
        return false;
    });
    

遇到的問題

  1. 如何在 SPA 中封裝 axios 以供組件使用:
    • 首先吃溅,直接在組件中進行 HTTP Request 是不合理的溶诞,因為維護起來不方便,也不利于代碼復(fù)用决侈。

    • 可以封裝一個全局 util 類螺垢,實例化一個 axios 對象,涉及與 axios 相關(guān)的操作的函數(shù)都放在這個類中赖歌,組件通過引用這個類并調(diào)用相關(guān)函數(shù)來發(fā)起 HTTP Request 枉圃。

    • 要注意的是,如果需要用到 Promise 的異步特性俏站,通過異步返回值控制視圖讯蒲,以實現(xiàn)友好的界面交互 / 提示(或者其他目的),一定要將整個 axios 返回(其實就是返回一個 Promise)肄扎,而不是只返回某個結(jié)果值(可以參考上述代碼中 POST 表單的部分)。然后再利用 Promise 異步處理返回的結(jié)果即可赁酝。

      // util 中的 submit 函數(shù)
      
      const submitTask = (taskInfo, file) => {
          let data = new FormData();
          data.append('job', JSON.stringify(taskInfo));
          data.append('user', store.state.auth.username);
          data.append('job_file', file);
          return ajaxInstance.post('/job/start_job', data).then((response) => {
              console.log(response);
              if (response.data === 'success') {
                  return true;
              } else {
                  return false;
              }
          }).catch((error) => {
              console.error(error);
              return false;
          });
      }
      
      // submit 頁面
      
      util.submitTask(taskInfo, this.newFile).then((res) => {
          if (res) {
              this.$Message.success('已提交犯祠。');
              cleanSubmit();
          } else {
              this.$Message.error('提交失敗。');
              cleanSubmit();
          };
      })
      
  2. 如何提交表單:
    • 提交表單時一定要使用 FromData 對象手動生成一個表單酌呆,并把 FormData 當(dāng)做 data 傳遞給 axios 衡载,axios 會自動識別 data 的類型并設(shè)置好相應(yīng)的 Request Header 。提交文件只需要將文件對象 append 到表單中即可隙袁。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末痰娱,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子菩收,更是在濱河造成了極大的恐慌梨睁,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件娜饵,死亡現(xiàn)場離奇詭異坡贺,居然都是意外死亡,警方通過查閱死者的電腦和手機箱舞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門遍坟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人晴股,你說我怎么就攤上這事愿伴。” “怎么了电湘?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵隔节,是天一觀的道長万搔。 經(jīng)常有香客問我,道長官帘,這世上最難降的妖魔是什么瞬雹? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮刽虹,結(jié)果婚禮上酗捌,老公的妹妹穿的比我還像新娘。我一直安慰自己涌哲,他們只是感情好胖缤,可當(dāng)我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著阀圾,像睡著了一般哪廓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上初烘,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天涡真,我揣著相機與錄音,去河邊找鬼肾筐。 笑死哆料,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的吗铐。 我是一名探鬼主播东亦,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼唬渗!你這毒婦竟也來了典阵?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤镊逝,失蹤者是張志新(化名)和其女友劉穎壮啊,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蹋半,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡他巨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了减江。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片染突。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖辈灼,靈堂內(nèi)的尸體忽然破棺而出份企,到底是詐尸還是另有隱情,我是刑警寧澤巡莹,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布司志,位于F島的核電站甜紫,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏骂远。R本人自食惡果不足惜囚霸,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望激才。 院中可真熱鬧拓型,春花似錦、人聲如沸瘸恼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽东帅。三九已至压固,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間靠闭,已是汗流浹背帐我。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留阎毅,地道東北人焚刚。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像扇调,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子抢肛,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,969評論 2 355

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理狼钮,服務(wù)發(fā)現(xiàn),斷路器捡絮,智...
    卡卡羅2017閱讀 134,657評論 18 139
  • 時間2017-03-31 13:43:44Hope’s Blog 原文https://blog.ygxdxx.co...
    蕭玄辭閱讀 15,211評論 3 16
  • 一福稳、安裝 1涎拉、 利用npm安裝npm install axios --save 2、 利用bower安裝bower...
    kiddings閱讀 1,762評論 0 3
  • 感受我愛你的心跳在左邊的圆,你離我遠去鼓拧,讓我已經(jīng)感受不到自己的存在,你以前總是用右手牽著我越妈,你卻不知季俩,我感覺不到你的心...
    雙兔閱讀 237評論 0 0
  • int ia_ + virtual f() + class B:virtual public A+ int ib_...
    HenryTien閱讀 325評論 1 0