摘要:最近項(xiàng)目中使用也遇到了一些問題,就借此機(jī)會(huì)總結(jié)一下,如有錯(cuò)誤,還請(qǐng)不吝指正。而在使用時(shí)對(duì)應(yīng)的傳參使用的是,是作為請(qǐng)求體發(fā)送的,同樣使用這種形式的還有等請(qǐng)求方式。層在環(huán)境中可以使用。
功能Axios是一個(gè)基于Promise的 HTTP 庫,可以用在瀏覽器和node.js 中,因?yàn)橛却蟠蟮耐扑],axios也變得越來越流行。最近項(xiàng)目中使用axios也遇到了一些問題,就借此機(jī)會(huì)總結(jié)一下,如有錯(cuò)誤,還請(qǐng)不吝指正。
瀏覽器端發(fā)起XMLHttpRequests請(qǐng)求
node層發(fā)起http請(qǐng)求
支持Promise API
攔截請(qǐng)求和響應(yīng)
轉(zhuǎn)換請(qǐng)求和響應(yīng)數(shù)據(jù)
取消請(qǐng)求
自動(dòng)轉(zhuǎn)換JSON數(shù)據(jù)
客戶端支持防御XSRF(跨站請(qǐng)求偽造)
兼容 使用npm
npm install axios
bower
bower install axios
cdn
GET發(fā)起請(qǐng)求
axios.get("/user?ID=123") .then( res => { // 請(qǐng)求數(shù)據(jù)成功并返回?cái)?shù)據(jù)。 console.info(res) }).catch( e => { if(e.response){ //請(qǐng)求已發(fā)出,服務(wù)器返回狀態(tài)碼不是2xx。 console.info(e.response.data) console.info(e.response.status) console.info(e.response.headers) }else if(e.request){ // 請(qǐng)求已發(fā)出,但沒有收到響應(yīng) // e.request 在瀏覽器里是一個(gè)XMLHttpRequest實(shí)例, // 在node中是一個(gè)http.ClientRequest實(shí)例 console.info(e.request) }else{ //發(fā)送請(qǐng)求時(shí)異常,捕捉到錯(cuò)誤 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ù)時(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ā)送請(qǐng)求,且其必須是一個(gè)plain object或者是URLSearchParams object。plain object(純對(duì)象)是指用JSON形式定義的普通對(duì)象或者new Object()創(chuàng)建的簡(jiǎn)單對(duì)象;而URLSearchParams object指的是一個(gè)可以由URLSearchParams接口定義的一些實(shí)用方法來處理 URL 的查詢字符串的對(duì)象,也就是說params傳參是以/user?ID=1&name=mike&sex=male形式傳遞的。
而在使用POST時(shí)對(duì)應(yīng)的傳參使用的是data,data是作為請(qǐng)求體發(fā)送的,同樣使用這種形式的還有PUT,PATCH等請(qǐng)求方式。有一點(diǎn)需要注意的是,axios中POST的默認(rèn)請(qǐng)求體類型為Content-Type:application/json(JSON規(guī)范流行),這也是最常見的請(qǐng)求體類型,也就是說使用的是序列化后的json格式字符串來傳遞參數(shù),如:{ "name" : "mike", "sex" : "male" };同時(shí),后臺(tái)必須要以支持@RequestBody的形式接收參數(shù),否則會(huì)出現(xiàn)前臺(tái)傳參正確,后臺(tái)接收不到的情況。
如果想要設(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,但是這里有一個(gè)Polyfill (polyfill:用于實(shí)現(xiàn)瀏覽器并不支持的原生API的代碼,可以模糊理解為補(bǔ)丁,同時(shí)要確保polyfill在全局環(huán)境中)。
或者,你也可以用qs這個(gè)庫來格式化數(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ǔ)充
常見的請(qǐng)求體類型還有一種方式,即multipart/form-data(瀏覽器原生支持),也就是提交表單數(shù)據(jù)常用的一種格式。和x-www-form-urlencoded對(duì)比起來,后者則是數(shù)據(jù)被編碼成以 "&" 分隔的鍵-值對(duì), 同時(shí)以 "=" 分隔鍵和值。非字母或數(shù)字的字符會(huì)被Percent-encoding(URL encoding),這也就是為什么這種類型不支持二進(jìn)制數(shù)據(jù)的原因 (應(yīng)使用 multipart/form-data 代替)。
END本文只是總結(jié)了axios中一些常用的知識(shí)點(diǎn),也是本人平時(shí)在開發(fā)中遇到過的問題,所以還有些node層的應(yīng)用以及其他使用場(chǎng)景沒有涉及到,更詳細(xì)的配置請(qǐng)移步axios官方文檔,另,推薦一篇翻譯不錯(cuò)的中文文檔axios譯。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/90071.html
摘要:前言用有一段時(shí)間了,從用搭建項(xiàng)目一步步配置,到之后的研究動(dòng)效這些,一直想寫些東西記錄一下做個(gè)總結(jié),剛好趁著有空就整理一下。結(jié)語有新的知識(shí)點(diǎn)會(huì)更新到知識(shí)體系中,總結(jié)和心得體會(huì)會(huì)單獨(dú)寫文章詳述,努力填坑 前言 用vue有一段時(shí)間了,從用vue-cli搭建項(xiàng)目、一步步配置axios、vuex、vue-router,到之后的研究canvas、動(dòng)效這些,一直想寫些東西記錄一下、做個(gè)總結(jié),剛好趁著...
摘要:一項(xiàng)目地址該項(xiàng)目的量只有,能不用的盡量別用,太費(fèi)勁了。該問題解決方式如下的,這個(gè)解決來自,需要注意的是在以上的版本,需要替換成。與的解決辦法是在里加和里加變量,這個(gè)網(wǎng)上很多,就不贅述。不生成的公理類型必須設(shè)置為。 一.項(xiàng)目地址https://github.com/dfleischha...該項(xiàng)目的fork量只有2,能不用的盡量別用,太費(fèi)勁了。二.marven踩坑1.Could not ...
摘要:在項(xiàng)目開始之前,不能心急立刻去搭建,需要設(shè)定幾個(gè)步驟來開展,接下來大概的說一下我從技術(shù)選型到項(xiàng)目前端搭建好的整個(gè)生命周期。開發(fā)該項(xiàng)目的底層的內(nèi)容遠(yuǎn)不止這些,但由于公司制度規(guī)定,只能大概的闡述了在從接手到選型到搭建完畢這到的過程的做法和思考。 前段時(shí)間部門要基于一個(gè)系統(tǒng)的基礎(chǔ)上開發(fā)一個(gè)管理平臺(tái),于是我接手了該平臺(tái)的重活,因?yàn)樯弦粋€(gè)平臺(tái)我用了vue搭建,所以這次想用react來搭建。在項(xiàng)目...
摘要:學(xué)習(xí)成本很低,另外官方有比較完善的中文文檔。簡(jiǎn)單本身是沒有錯(cuò)誤,一個(gè)東西能以簡(jiǎn)單的方式解決難道不好嗎關(guān)于這個(gè)中文文檔居然還有人噴那些喜歡用的是不是英文能力差,我就再報(bào)以呵呵一笑。本身擁有中文文檔就是一個(gè)優(yōu)勢(shì),結(jié)果還成了被噴的地方。 前言 由于這段時(shí)間工作上也是挺忙的,就沒有時(shí)間去寫這個(gè)項(xiàng)目,中間一直都是寫寫停停,進(jìn)度也是非常慢的。正好前幾天都還比較空,就趕緊抓著空閑時(shí)間去寫這個(gè)項(xiàng)目,最...
閱讀 3161·2021-11-22 13:54
閱讀 3455·2021-11-15 11:37
閱讀 3617·2021-10-14 09:43
閱讀 3515·2021-09-09 11:52
閱讀 3618·2019-08-30 15:53
閱讀 2478·2019-08-30 13:50
閱讀 2069·2019-08-30 11:07
閱讀 900·2019-08-29 16:32