国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

node.js中axios使用心得總結(jié)

2019-11-19 14:49:39
字體:
供稿:網(wǎng)友

Axios是一個基于Promise的 HTTP 庫,可以用在瀏覽器和node.js 中,因?yàn)橛却蟠蟮耐扑],axios也變得越來越流行。最近項(xiàng)目中使用axios也遇到了一些問題,就借此機(jī)會總結(jié)一下,如有錯誤,還請不吝指正。

功能

瀏覽器端發(fā)起XMLHttpRequests請求

node層發(fā)起http請求

支持Promise API

攔截請求和響應(yīng)

轉(zhuǎn)換請求和響應(yīng)數(shù)據(jù)

取消請求

自動轉(zhuǎn)換JSON數(shù)據(jù)

客戶端支持防御XSRF(跨站請求偽造)

兼容

使用

npm
npm install axios

bower
bower install axios

cdn

<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

發(fā)起請求

GET

axios.get('/user?ID=123')  .then( res => {    console.info(res)  }).catch( e => {    if(e.response){    //請求已發(fā)出,服務(wù)器返回狀態(tài)碼不是2xx。      console.info(e.response.data)      console.info(e.response.status)      console.info(e.response.headers)    }else if(e.request){      // 請求已發(fā)出,但沒有收到響應(yīng)      // e.request 在瀏覽器里是一個XMLHttpRequest實(shí)例,      // 在node中是一個http.ClientRequest實(shí)例      console.info(e.request)    }else{      //發(fā)送請求時異常,捕捉到錯誤      console.info('error',e.message)    }    console.info(e.config)  })// 等同以下寫法axios({  url: '/user',   method: 'GET',  params: {    ID: 123  }}).then( res => {  console.info(res)}).catch( e=> {  console.info(e)})

POST

axios.post('/user', {  firstName: 'Mike',  lastName: 'Allen'}).then( res => {  console.info(res)}).catch( e => {  console.info(e)})// 等同以下寫法axios({  url: '/user',  method: 'POST',  data: {    firstName: 'Mike',    lastName: 'Allen'  }}).then( res => {  console.info(res)}).catch( e => {  console.info(e)})

注意事項(xiàng)

在使用GET方法傳遞參數(shù)時使用的是params,并且官方文檔中介紹為:params are the URL parameters to be sent with the request. Must be a plain object or a URLSearchParams object。譯為:params作為URL鏈接中的參數(shù)發(fā)送請求,且其必須是一個plain object或者是URLSearchParams object。plain object(純對象)是指用JSON形式定義的普通對象或者new Object()創(chuàng)建的簡單對象;而URLSearchParams object指的是一個可以由URLSearchParams接口定義的一些實(shí)用方法來處理 URL 的查詢字符串的對象,也就是說params傳參是以/user?ID=1&name=mike&sex=male形式傳遞的。

而在使用POST時對應(yīng)的傳參使用的是data,data是作為請求體發(fā)送的,同樣使用這種形式的還有PUT,PATCH等請求方式。有一點(diǎn)需要注意的是,axios中POST的默認(rèn)請求體類型為Content-Type:application/json(JSON規(guī)范流行),這也是最常見的請求體類型,也就是說使用的是序列化后的json格式字符串來傳遞參數(shù),如:{ "name" : "mike", "sex" : "male" };同時,后臺必須要以支持@RequestBody的形式接收參數(shù),否則會出現(xiàn)前臺傳參正確,后臺接收不到的情況。

如果想要設(shè)置類型為Content-Type:application/x-www-form-urlencoded(瀏覽器原生支持),axios提供了兩種方式,如下:

瀏覽器端

const params = new URLSearchParams();params.append('param1', 'value1');params.append('param2', 'value2');axios.post('/user', params);

不過,并不是所有瀏覽器都支持URLSearchParams,兼容性查詢caniuse.com,但是這里有一個Polyfill (polyfill:用于實(shí)現(xiàn)瀏覽器并不支持的原生API的代碼,可以模糊理解為補(bǔ)丁,同時要確保polyfill在全局環(huán)境中)。

或者,你也可以用qs這個庫來格式化數(shù)據(jù)。默認(rèn)情況下在安裝完axios后就可以使用qs庫。

const qs = require('qs');axios.post('/user', qs.stringify({'name':'mike'}));

node層

在node環(huán)境中可以使用querystring。同樣,也可以用qs來格式化數(shù)據(jù)。

const querystring = require('querystring');axios.post('http://something.com/', querystring.stringify({'name':'mike'}));

補(bǔ)充

常見的請求體類型還有一種方式,即multipart/form-data(瀏覽器原生支持),也就是提交表單數(shù)據(jù)常用的一種格式。和x-www-form-urlencoded對比起來,后者則是數(shù)據(jù)被編碼成以 '&' 分隔的鍵-值對, 同時以 '=' 分隔鍵和值。非字母或數(shù)字的字符會被Percent-encoding(URL encoding),這也就是為什么這種類型不支持二進(jìn)制數(shù)據(jù)的原因 (應(yīng)使用 multipart/form-data 代替)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 太湖县| 通州区| 怀柔区| 民乐县| 永清县| 罗江县| 长岭县| 蓬莱市| 上林县| 云霄县| 册亨县| 山阴县| 尤溪县| 沈阳市| 太原市| 吴忠市| 资源县| 东阳市| 乌鲁木齐市| 仁怀市| 龙口市| 新乐市| 孙吴县| 桂东县| 奈曼旗| 郧西县| 榆中县| 囊谦县| 天峻县| 两当县| 长泰县| 运城市| 唐海县| 溆浦县| 贵溪市| 永宁县| 灵台县| 普格县| 油尖旺区| 忻城县| 广平县|