欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2017年11月29日 11:05:43   投稿:laozhang  
這篇文章主要介紹了node.js中axios使用心得總結(jié),以及分析了中間遇到的錯(cuò)誤,大家參考一下。

Axios是一個(gè)基于Promise的 HTTP 庫(kù),可以用在瀏覽器和node.js 中,因?yàn)橛却蟠蟮耐扑],axios也變得越來(lái)越流行。最近項(xiàng)目中使用axios也遇到了一些問(wèn)題,就借此機(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

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

發(fā)起請(qǐng)求

GET

axios.get('/user?ID=123')
  .then( res => {
    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ā)出,但沒(méi)有收到響應(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í)用方法來(lái)處理 URL 的查詢字符串的對(duì)象,也就是說(shuō)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)求體類型,也就是說(shuō)使用的是序列化后的json格式字符串來(lái)傳遞參數(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);

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

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

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

node層

在node環(huán)境中可以使用querystring。同樣,也可以用qs來(lái)格式化數(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ì)比起來(lái),后者則是數(shù)據(jù)被編碼成以 '&' 分隔的鍵-值對(duì), 同時(shí)以 '=' 分隔鍵和值。非字母或數(shù)字的字符會(huì)被Percent-encoding(URL encoding),這也就是為什么這種類型不支持二進(jìn)制數(shù)據(jù)的原因 (應(yīng)使用 multipart/form-data 代替)。

相關(guān)文章

  • 使用Node.js插件給指定目錄下的所有圖片添加上文字水印

    使用Node.js插件給指定目錄下的所有圖片添加上文字水印

    加水印是為了保護(hù)圖片的版權(quán)和安全,在互聯(lián)網(wǎng)上,很容易將圖片下載或者截屏保存下來(lái),然后進(jìn)行二次使用,這就侵犯了原作者的版權(quán),此外,水印也可以幫助識(shí)別圖片的來(lái)源和所有者,因此本文給大家介紹了如何使用Node.js插件給指定目錄下的所有圖片添加上文字水印
    2023-12-12
  • nodejs部署到騰訊云服務(wù)器的實(shí)現(xiàn)(寶塔面板linux系統(tǒng))

    nodejs部署到騰訊云服務(wù)器的實(shí)現(xiàn)(寶塔面板linux系統(tǒng))

    本文主要介紹了nodejs部署到騰訊云服務(wù)器的實(shí)現(xiàn)(寶塔面板linux系統(tǒng)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • nodejs Assert中equal(),strictEqual(),deepEqual(),strictDeepEqual()比較

    nodejs Assert中equal(),strictEqual(),deepEqual(),strictDeepEq

    這篇文章主要介紹了node項(xiàng)目中遇到使用斷言測(cè)試程序,看了下nodejs的api之后,對(duì)nodejs中assert斷言的幾個(gè)方法做個(gè)簡(jiǎn)單的記錄,需要的朋友可以參考下
    2017-09-09
  • node.js多個(gè)異步過(guò)程中判斷執(zhí)行是否完成的解決方案

    node.js多個(gè)異步過(guò)程中判斷執(zhí)行是否完成的解決方案

    這篇文章主要給大家介紹了關(guān)于node.js多個(gè)異步過(guò)程中判斷執(zhí)行是否完成的幾種解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-12-12
  • vscode執(zhí)行npm時(shí)的一些錯(cuò)誤以及處理辦法

    vscode執(zhí)行npm時(shí)的一些錯(cuò)誤以及處理辦法

    在前端開發(fā)過(guò)程中,npm的使用是少不了的,所以需要知道基本的操作使用,并且了解常見的異常情況處理,下面這篇文章主要給大家介紹了關(guān)于vscode執(zhí)行npm時(shí)的一些錯(cuò)誤以及處理辦法的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • Node.js實(shí)現(xiàn)用戶評(píng)論社區(qū)功能(體驗(yàn)前后端開發(fā)的樂(lè)趣)

    Node.js實(shí)現(xiàn)用戶評(píng)論社區(qū)功能(體驗(yàn)前后端開發(fā)的樂(lè)趣)

    這篇文章主要介紹了Node.js實(shí)現(xiàn)用戶評(píng)論社區(qū)(體驗(yàn)前后端開發(fā)的樂(lè)趣) ,需要的朋友可以參考下
    2019-05-05
  • 基于nodejs+express(4.x+)實(shí)現(xiàn)文件上傳功能

    基于nodejs+express(4.x+)實(shí)現(xiàn)文件上傳功能

    通過(guò)一段時(shí)間的查閱資料發(fā)現(xiàn)實(shí)現(xiàn)上傳的方式有:1.express中間件multer模塊2.connect-multiparty模塊(但現(xiàn)在 官方不推薦 )3.使用multiparty模塊實(shí)現(xiàn)4.使用formidable插件實(shí)現(xiàn),本文給大家介紹nodejs+express(4.x+)實(shí)現(xiàn)文件上傳功能,需要的朋友參考下
    2015-11-11
  • 淺談node的事件機(jī)制

    淺談node的事件機(jī)制

    本篇文章主要介紹了node的事件機(jī)制,本文通過(guò)實(shí)現(xiàn)一個(gè)簡(jiǎn)易的、具有發(fā)布/訂閱模式的事件機(jī)制,以此來(lái)理清EventEmitter類的實(shí)現(xiàn)思路,有興趣的可以了解一下
    2017-10-10
  • 提升node.js中使用redis的性能遇到的問(wèn)題及解決方法

    提升node.js中使用redis的性能遇到的問(wèn)題及解決方法

    本文中提到的node redis client采用的基于node-redis封裝的二方包,因此問(wèn)題排查也基于node-redis這個(gè)模塊。接下來(lái)通過(guò)本文給大家分享提升node.js中使用redis的性能
    2018-10-10
  • Npm link的作用與使用示例代碼

    Npm link的作用與使用示例代碼

    npm link可以幫助我們模擬包安裝后的狀態(tài),它會(huì)在系統(tǒng)中做一個(gè)快捷方式映射,讓本地的包就好像 install 過(guò)一樣,可以直接使用,這篇文章主要介紹了Npm link的作用與使用示例代碼,需要的朋友可以參考下
    2023-01-01

最新評(píng)論