久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長(zhǎng)資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      淺析Node發(fā)起HTTP請(qǐng)求的6種方法

      Node中怎么發(fā)起HTTP請(qǐng)求?本篇文章就來(lái)和大家一起探索下Node發(fā)起HTTP請(qǐng)求的6種不同方法,希望對(duì)大家有所幫助!

      淺析Node發(fā)起HTTP請(qǐng)求的6種方法

      node.js極速入門(mén)課程:進(jìn)入學(xué)習(xí)

      本文介紹6種在nodejs中發(fā)起HTTP請(qǐng)求的不同方法,這里我們會(huì)通過(guò)對(duì)掘金社區(qū)的板塊分類(lèi)接口 的請(qǐng)求作為演示來(lái)完成這個(gè)每種不同方法的使用,當(dāng)然為了更清晰的打印出所得到的數(shù)據(jù),我們要提前安裝chalk庫(kù)來(lái)給其打印的數(shù)據(jù)加上顏色,好了,我們馬上就要開(kāi)始啦~【相關(guān)教程推薦:nodejs視頻教程、編程教學(xué)】

      正文


      Node.js HTTPS Module

      Node.js在標(biāo)準(zhǔn)庫(kù)中帶有https模塊,所以你根本不需要引入任何庫(kù)去發(fā)起請(qǐng)求,因?yàn)閚ode.js本身就可以完成,處理一些簡(jiǎn)單的數(shù)據(jù)請(qǐng)求也是綽綽有余了。

      const chalk = require("chalk") const https = require('https')  https.get('https://api.juejin.cn/tag_api/v1/query_category_briefs', res => {     let list = [];     res.on('data', chunk => {         list.push(chunk);     });     res.on('end', () => {         const { data } = JSON.parse(Buffer.concat(list).toString());         data.forEach(item => {             console.log(`${chalk.yellow.bold(item.rank)}.${chalk.green(item.category_name)}`);         })     }); }).on('error', err => {     console.log('Error: ', err.message); });
      登錄后復(fù)制

      從結(jié)構(gòu)上有些許復(fù)雜,因?yàn)槲覀円粋€(gè)空數(shù)組list來(lái)存儲(chǔ)請(qǐng)求數(shù)據(jù)塊chunk,然后在請(qǐng)求結(jié)束后還要通過(guò)Buffer處理數(shù)據(jù)再解析成json格式。

      淺析Node發(fā)起HTTP請(qǐng)求的6種方法

      Axios

      相信前端的小伙伴對(duì)axios并不陌生,它是一個(gè)非常流行且受歡迎的Promise式請(qǐng)求庫(kù)。它既可以瀏覽器端使用可以在客戶端使用它,而且眾所周知,它還有著攔截器,數(shù)據(jù)自動(dòng)轉(zhuǎn)換json等十分方便的功能。

      我們可以使用以下命令安裝axios:

      npm i -S axios
      登錄后復(fù)制

      下面是我們通過(guò)axios獲取掘金板塊分類(lèi)簡(jiǎn)單示例:

      const chalk = require("chalk") const axios = require('axios');  axios.get('https://api.juejin.cn/tag_api/v1/query_category_briefs') .then(res => {     const { data } = res.data     data.forEach(item => {         console.log(`${chalk.yellow.bold(item.rank)}.${chalk.green(item.category_name)}`);     }) }) .catch(err => {     console.log('Error: ', err.message); });
      登錄后復(fù)制

      這里axios直接用get請(qǐng)求請(qǐng)求接口,可以結(jié)構(gòu)也是promise形式的,數(shù)據(jù)自動(dòng)幫你解析成json,可以說(shuō)是非常的簡(jiǎn)潔與方便。

      淺析Node發(fā)起HTTP請(qǐng)求的6種方法

      Got

      got聲稱是“一個(gè)人性化且功能強(qiáng)大的 Node.js HTTP 請(qǐng)求庫(kù)”,人性化在于它用了Promise式的API與對(duì)JOSN做處理配置等功能,而一些如HTTP2的支持,分頁(yè)式API以及RFC的緩存等能力是大多數(shù)請(qǐng)求庫(kù)所不具備的。

      我們可以使用以下命令安裝got:

      npm i -S got@10.7.0
      登錄后復(fù)制

      下面是我們通過(guò)got獲取掘金板塊分類(lèi)簡(jiǎn)單示例:

      const chalk = require("chalk") const got = require('got');  got.get('https://api.juejin.cn/tag_api/v1/query_category_briefs', {     responseType: 'json' }) .then(res => {     const { data } = res.body     data.forEach(item => {         console.log(`${chalk.yellow.bold(item.rank)}.${chalk.green(item.category_name)}`);     }) }) .catch(err => {     console.log('Error: ', err.message); });
      登錄后復(fù)制

      這里我們先要對(duì)請(qǐng)求接口進(jìn)行{responseType: 'json'}的配置,然后返回的數(shù)據(jù)可以在body里拿到了,也是十分的好用。

      淺析Node發(fā)起HTTP請(qǐng)求的6種方法

      Needle

      needle是一個(gè)比較簡(jiǎn)潔小巧的請(qǐng)求庫(kù),它的形式可以是Promise的方式也可以是回調(diào)函數(shù)的方式,看自己的習(xí)慣選用,而且它的返回值會(huì)對(duì)XML與JSON自動(dòng)做出轉(zhuǎn)換,也是非常的方便。

      我們可以使用以下命令安裝needle:

      npm i -S needle
      登錄后復(fù)制

      下面是我們通過(guò)needle獲取掘金板塊分類(lèi)簡(jiǎn)單示例:

      const chalk = require("chalk") const needle = require('needle');  needle.get('https://api.juejin.cn/tag_api/v1/query_category_briefs', (err, res) => {     if (err) return console.log('Error: ', err.message);     const { data } = res.body     data.forEach(item => {         console.log(`${chalk.yellow.bold(item.rank)}.${chalk.green(item.category_name)}`);     }) })
      登錄后復(fù)制

      這里我們演示的用了回調(diào)函數(shù)的方式來(lái)展示,可以看出返回有err與res,成功時(shí)err為null,成功后返回的res的body里就是所要請(qǐng)求的數(shù)據(jù),這里是幫你自動(dòng)轉(zhuǎn)化好的json格式。

      淺析Node發(fā)起HTTP請(qǐng)求的6種方法

      如果你想使用Promise的方式,可以這么去寫(xiě):

      needle('get', 'https://api.juejin.cn/tag_api/v1/query_category_briefs') .then(function(res) {     // ... }) .catch(function(err) {     // ... });
      登錄后復(fù)制

      Superagent

      請(qǐng)求庫(kù)superagent發(fā)布時(shí)間可謂是相當(dāng)?shù)脑缌丝梢宰匪莸?011年,但它是漸進(jìn)式客戶端 HTTP 請(qǐng)求庫(kù),與具有相同 API 的 Node.js 模塊,支持許多高級(jí) HTTP 客戶端功能,依舊是十分的好用。

      我們可以使用以下命令安裝superagent:

      npm i -S superagent
      登錄后復(fù)制

      下面是我們通過(guò)superagent獲取掘金板塊分類(lèi)簡(jiǎn)單示例:

      const chalk = require("chalk") const superagent = require('superagent');  superagent.get('https://api.juejin.cn/tag_api/v1/query_category_briefs') .then(res => {     const { data } = JSON.parse(res.text)     data.forEach(item => {         console.log(`${chalk.yellow.bold(item.rank)}.${chalk.green(item.category_name)}`);     }) }) .catch(err => {     console.log('Error: ', err.message); });
      登錄后復(fù)制

      現(xiàn)在的superagent用法與axios十分的相似,但是需要去自己把數(shù)據(jù)處理成json格式。

      淺析Node發(fā)起HTTP請(qǐng)求的6種方法

      Node-fetch

      顧名思義,這個(gè)請(qǐng)求庫(kù)它的api與window.fetch保持了一致,也是promise式的。最近非常受歡迎,但可能最大的問(wèn)題是,它的v2與v3版差異比較大,v2保持著cjs標(biāo)準(zhǔn),而v3則用了ejs的方式,升級(jí)后可能造成一些困擾,所以為了統(tǒng)一這個(gè)標(biāo)準(zhǔn)我們這里用了2.6.7版作為演示版本。

      我們可以使用以下命令安裝node-fetch:

      npm i -S node-fetch@2.6.7
      登錄后復(fù)制

      下面是我們通過(guò)node-fetch獲取掘金板塊分類(lèi)簡(jiǎn)單示例:

      const chalk = require("chalk") const fetch = require("node-fetch")  fetch('https://api.juejin.cn/tag_api/v1/query_category_briefs', {     method: 'GET' }) .then(async res => {     let { data } = await res.json()     data.forEach(item => {         console.log(`${chalk.yellow.bold(item.rank)}.${chalk.green(item.category_name)}`);     }) }) .catch(err => {     console.log('Error: ', err.message); });
      登錄后復(fù)制

      可以看出它與window.fetch用起來(lái)完全一樣,沒(méi)有任何學(xué)習(xí)壓力。

      淺析Node發(fā)起HTTP請(qǐng)求的6種方法

      對(duì)比


      接下來(lái)我們看一下關(guān)于這幾款請(qǐng)求庫(kù)近一年的下載量趨勢(shì)圖:

      淺析Node發(fā)起HTTP請(qǐng)求的6種方法

      現(xiàn)在我們可以發(fā)現(xiàn),就下載量而言,在過(guò)去一年中,node-fetch 最受歡迎,needle 最不受歡迎。

      Stars Version Unpacked Size Created Years
      axios 91,642 0.26.1 398 kB 2014
      got 10,736 12.0.1 244 kB 2014
      needle 1,446 3.0.0 227 kB 2012
      superagent 15,928 7.1.1 581 kB 2011
      node-fetch 7,434 3.2.3 106 kB 2015

      這里我們又統(tǒng)計(jì)了這幾個(gè)庫(kù)的其他一些數(shù)據(jù),axios的star數(shù)量可謂一騎絕塵,遠(yuǎn)遠(yuǎn)超過(guò)其他幾個(gè)庫(kù)。

      結(jié)語(yǔ)

      這些請(qǐng)求庫(kù),他們都做了同一件事都可以發(fā)起HTTP請(qǐng)求,或許寫(xiě)法會(huì)有些許不同,但都是條條大路通羅馬。就個(gè)人而言,也可能是經(jīng)常寫(xiě)瀏覽器端的緣故,所以是axios的忠實(shí)用戶,不管是練習(xí)還是開(kāi)發(fā)axios都是首選,當(dāng)然node-fetch也越來(lái)越收到關(guān)注,包也十分的小,練習(xí)的時(shí)候也會(huì)經(jīng)常用到,但api使用起來(lái)感覺(jué)還是沒(méi)有axios那般方便。

      其實(shí)還有兩個(gè)出名的HTTP請(qǐng)求庫(kù)本文沒(méi)有提到:

      一個(gè)是ky.js,它是一個(gè)非常小巧且強(qiáng)大的fetch式的請(qǐng)求庫(kù),主要為deno和現(xiàn)代瀏覽器所打造,所以暫時(shí)不參與其中的討論,感興趣的同學(xué)自己探索。

      另一個(gè)就是request.js,沒(méi)有說(shuō)的原因是它在2020年的時(shí)候就已經(jīng)被完全棄用了,如果有使用過(guò)的小伙伴可以在把項(xiàng)目里的request它替換成其他的方法。

      淺析Node發(fā)起HTTP請(qǐng)求的6種方法

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)