介紹axios的基本使用(vue中使用axios)

axios就是一個(gè)基于Promise的馋评,發(fā)送http請(qǐng)求的一個(gè)工具庫。

特點(diǎn)

  1. 支持Promise API
  2. 攔截請(qǐng)求和響應(yīng)刺啦。攔截請(qǐng)求留特,可以過濾請(qǐng)求參數(shù);攔截響應(yīng)玛瘸,可以處理響應(yīng)異常
  3. 取消請(qǐng)求蜕青。請(qǐng)求可以手動(dòng)取消

vue中使用axios

  1. 安裝axios模塊
    npm install --save axios
  2. 在index.js文件中引入axios
import axios from 'axios'
new Vue({
  // el: '#app',
  // router,
  axios  // 加入axios
})

基本API

1. 執(zhí)行g(shù)et請(qǐng)求,有兩種方式
// 第一種方式  將參數(shù)直接寫在url中
axios.get('/getMainInfo?id=123')
.then((res) => {
  console.log(res)
})
.catch((err) => {
  console.log(err)
})
// 第二種方式  將參數(shù)直接寫在params中
axios.get('/getMainInfo', {
  params: {
    id: 123
  }
})
.then((res) => {
  console.log(res)
})
.catch((err) => {
  console.log(err)
})
2. 執(zhí)行post請(qǐng)求糊渊,注意執(zhí)行post請(qǐng)求的入?yún)⒂液耍恍枰獙懺趐arams字段中,這個(gè)地方要注意與get請(qǐng)求的第二種方式進(jìn)行區(qū)別渺绒。
axios.post('/getMainInfo', {
  id: 123
})
.then((res) => {
  console.log(res)
})
.catch((err) => {
  console.log(err)
})
3. 通過向axios傳遞的相關(guān)配置來創(chuàng)建請(qǐng)求axios(config)
(1)下面是常用的配置字段:
  • url:請(qǐng)求路徑蒙兰,string類型
  • method:請(qǐng)求方法,string類型
  • baseURL:baseURL會(huì)自動(dòng)加在url前面芒篷,除非url是一個(gè)絕對(duì)URL搜变,string類型
  • transformRequest:允許在向服務(wù)器發(fā)送請(qǐng)求之前,修改請(qǐng)求數(shù)據(jù)针炉,只適用于post挠他,put,patch請(qǐng)求篡帕,數(shù)組類型殖侵,數(shù)組里面的最后一個(gè)函數(shù)必須返回一個(gè)字符串
[fucntion(data) {
  // 對(duì)data進(jìn)行更改
  return data
}]
  • transformResponse:這里提前處理返回的數(shù)據(jù)
  • headers:自定義請(qǐng)求頭
  • params:即將于請(qǐng)求一起發(fā)送的url參數(shù)(一般只用于get請(qǐng)求)一般是對(duì)象類型
  • data:作為請(qǐng)求主體被發(fā)送是數(shù)據(jù)(一般只用于post請(qǐng)求)一般是對(duì)象類型
  • timeout:超時(shí)時(shí)間贸呢,超過時(shí)間,請(qǐng)求將被中斷
  • withCredentials:表示跨域請(qǐng)求時(shí)是否需要使用憑證
  • responseType:響應(yīng)數(shù)據(jù)的類型拢军,默認(rèn)是'json'楞陷,可以是'text', 'json','document','arraybuffer','blob','stream'
  • maxContentLength:響應(yīng)數(shù)據(jù)的最大尺寸
  • proxy:代理服務(wù)器主機(jī)名稱和端口
proxy: {
  host: '127.0.0.1',
  port: 9000,
  auth: : {
    username: 'mikeymike',
    password: 'rapunz3l'
  }
},
(2)下面是響應(yīng)的數(shù)據(jù)接口
{
  data: // 服務(wù)器響應(yīng)數(shù)據(jù)
  status: // http狀態(tài)碼
  statusText: // 服務(wù)器響應(yīng)的http狀態(tài)信息
  headers:  // 響應(yīng)頭
  config: // 請(qǐng)求配置數(shù)據(jù)
}
(3)舉例
// 發(fā)送 POST 請(qǐng)求
axios({
  method: 'post',
  url: '/getMainInfo',
  data: {
    id: 123
  }
}).then(res => {
  console.log(res.data)
  console.log(res.status)
  console.log(res.statusText)
  console.log(res.headers)
  console.log(res.config)
}).catch(err => {
  console.log(err)
})
4. 配置默認(rèn)值default

axios.default.baseURL = ''
axios.default.headers.common['Authorization'] = AUTH_TOKEN
...等等默認(rèn)配置

5. 執(zhí)行多個(gè)并發(fā)

axios.all()和Promise.all()執(zhí)行機(jī)制是一樣的,要么全部成功走then茉唉,要么就走catch

function getUserName() {
  return axios.get('/getUseName?id=123')
}
function getUserAge() {
  return axios.get('getUserAge?id=123')
}
axios.all([getUserName(), getUserAge()]) .then(
  axios.spread(function(acct, perms) {  // 處理并發(fā)請(qǐng)求的助手函數(shù)
    console.log(acct, perms)  // 全部請(qǐng)求成功
  })).catch(err => {
  console.log(err)  // 只要任意一個(gè)請(qǐng)求出錯(cuò)
})

6. 攔截器

(1)在請(qǐng)求之前攔截請(qǐng)求
// 添加請(qǐng)求攔截器
axios.interceptors.request.use(function (config) {
  // 在發(fā)送請(qǐng)求之前做些什么
  return config;
}, function (error) {
  // 對(duì)請(qǐng)求錯(cuò)誤做些什么
  return Promise.reject(error);
})
(2)在被then固蛾,catch處理前攔截響應(yīng)
// 添加響應(yīng)攔截器
axios.interceptors.response.use(function (response) {
  // 對(duì)響應(yīng)數(shù)據(jù)做點(diǎn)什么
  return response;
}, function (error) {
  // 對(duì)響應(yīng)錯(cuò)誤做點(diǎn)什么
  return Promise.reject(error);
});
(3)可以為自定義 axios 實(shí)例添加攔截器
var instance = axios.create([config]);
instance.interceptors.request.use(function () {/*...*/});

7. 封裝axios

在開發(fā)中,總會(huì)有很多的http請(qǐng)求度陆,那我們就要封裝好一個(gè)axios艾凯,使用更方便一些

(1)封裝
// request.js文件
import axios from 'axios'
import qs from 'qs'
// 引入基礎(chǔ)參數(shù)文件  和  baseURL配置文件
import baseParams from './baseParams'  // 基本參數(shù),比如一些登錄信息之類的參數(shù)
import { BASE_URL } from './config'   // baseURL寫在config.js文件中
// 默認(rèn)的全局配置
axios.defaults.baseURL = BASE_URL
axios.defaults.timeout = 10000
// 請(qǐng)求發(fā)送之前攔截懂傀,進(jìn)行處理(根據(jù)業(yè)務(wù)需求進(jìn)行攔截處理)
axios.interceptors.request.use(success => {
  return success
}, error => {
  return reject(error)
})
// then,catch處理之前趾诗,進(jìn)行攔截處理(根據(jù)業(yè)務(wù)需求進(jìn)行攔截處理)
axios.interceptors.response.use(response => {
  return response
}, error => {
  return Promise.reject(error)
})
// 導(dǎo)出post請(qǐng)求
export function post (url, data, withBaseParams = false) {
  return new Promise((resolve, reject) => {
    axios({
      method: 'post',
      url,
      data: withBaseParams ? qs.stringify({...baseParams, data}) : qs.stringify(data),
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
      }
    })
      .then(res => successHandle(res, resolve))   // 將數(shù)據(jù)處理之后傳給頁面
      .catch(err => errorHandle(err, reject))
  })
}
// 導(dǎo)出get請(qǐng)求
export function get (url, params) {
  return new Promise((resolve, reject) => {
    axios({
      method: 'get',
      url,
      params,
      headers: {}
    })
      .then(res => successHandle(res, resolve))
      .catch(err => errorHandle(err, reject))
  })
}
// then處理執(zhí)行了successHandle
function successHandle(data, resolve) {
  if (res.success && res.errorCode == '60000') {
    resolve(res)
  } else {
    // 彈出toast報(bào)錯(cuò)
    Toast({
      message: res.msg,
      duration: 2000
    })
  }
}
// catch處理執(zhí)行了errorHandle
function errorHandle(err, reject) {
  reject(err)
}
(2)引入使用
// 引入使用
import {get, post} from 'request.js'
post('/getMainInfo', {id: 123}, true)
.then(res => {
  console.log(res)
})
.catch(err => {
  console.log(err)  
})

寫在最后

感謝您的view

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蹬蚁,隨后出現(xiàn)的幾起案子恃泪,更是在濱河造成了極大的恐慌,老刑警劉巖犀斋,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贝乎,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡闪水,警方通過查閱死者的電腦和手機(jī)糕非,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門蒙具,熙熙樓的掌柜王于貴愁眉苦臉地迎上來球榆,“玉大人,你說我怎么就攤上這事禁筏〕侄ぃ” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵篱昔,是天一觀的道長每强。 經(jīng)常有香客問我,道長州刽,這世上最難降的妖魔是什么空执? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮穗椅,結(jié)果婚禮上辨绊,老公的妹妹穿的比我還像新娘。我一直安慰自己匹表,他們只是感情好门坷,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布宣鄙。 她就那樣靜靜地躺著,像睡著了一般默蚌。 火紅的嫁衣襯著肌膚如雪冻晤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天绸吸,我揣著相機(jī)與錄音鼻弧,去河邊找鬼。 笑死惯裕,一個(gè)胖子當(dāng)著我的面吹牛温数,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蜻势,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼撑刺,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了握玛?” 一聲冷哼從身側(cè)響起够傍,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎挠铲,沒想到半個(gè)月后冕屯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拂苹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年安聘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瓢棒。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡浴韭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出脯宿,到底是詐尸還是另有隱情念颈,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布连霉,位于F島的核電站榴芳,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏跺撼。R本人自食惡果不足惜窟感,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望歉井。 院中可真熱鬧柿祈,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至紧索,卻和暖如春袁辈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背珠漂。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工晚缩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人媳危。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓荞彼,卻偏偏與公主長得像,于是被迫代替她去往敵國和親待笑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鸣皂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

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