最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Node.js發(fā)起HTTP請求的6種不同方法小結(jié)

 更新時間:2022年03月14日 15:33:56   作者:jsmask  
本文主要介紹了Node.js發(fā)起HTTP請求的6種不同方法小結(jié),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

介紹

本期將向大家介紹6種不同的方法在node.js中去發(fā)起HTTP請求,這里我們會通過對掘金社區(qū)的板塊分類接口 的請求作為演示來完成這個每種不同方法的使用,當然為了更清晰的打印出所得到的數(shù)據(jù),我們要提前安裝chalk庫來給其打印的數(shù)據(jù)加上顏色,好了,我們馬上就要開始啦~

正文

Node.js HTTPS Module

Node.js在標準庫中帶有https模塊,所以你根本不需要引入任何庫去發(fā)起請求,因為node.js本身就可以完成,處理一些簡單的數(shù)據(jù)請求也是綽綽有余了。

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);
});

從結(jié)構(gòu)上有些許復雜,因為我們要弄一個空數(shù)組list來存儲請求數(shù)據(jù)塊chunk,然后在請求結(jié)束后還要通過Buffer處理數(shù)據(jù)再解析成json格式。

Axios

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

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

npm i -S axios

下面是我們通過axios獲取掘金板塊分類簡單示例:

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);
});

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

Got

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

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

npm i -S got@10.7.0

下面是我們通過got獲取掘金板塊分類簡單示例:

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);
});

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

Needle

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

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

npm i -S needle

下面是我們通過needle獲取掘金板塊分類簡單示例:

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)}`);
    })
})

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

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

needle('get', 'https://api.juejin.cn/tag_api/v1/query_category_briefs')
.then(function(res) {
    // ...
})
.catch(function(err) {
    // ...
});

Superagent

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

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

npm i -S superagent

下面是我們通過superagent獲取掘金板塊分類簡單示例:

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);
});

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

Node-fetch

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

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

npm i -S node-fetch@2.6.7

下面是我們通過node-fetch獲取掘金板塊分類簡單示例:

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);
});

可以看出它與window.fetch用起來完全一樣,沒有任何學習壓力。

對比

接下來我們看一下關(guān)于這幾款請求庫近一年的下載量趨勢圖:

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

 StarsVersionUnpacked SizeCreated Years
axios91,6420.26.1398 kB2014
got10,73612.0.1244 kB2014
needle1,4463.0.0227 kB2012
superagent15,9287.1.1581 kB2011
node-fetch7,4343.2.3106 kB2015

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

結(jié)語

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

其實還有兩個出名的HTTP請求庫本文沒有提到:

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

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

到此這篇關(guān)于Node.js發(fā)起HTTP請求的6種不同方法小結(jié)的文章就介紹到這了,更多相關(guān)Node.js發(fā)起HTTP請求內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • npm設(shè)置同時從多個包源加載包的方法

    npm設(shè)置同時從多個包源加載包的方法

    本文主要介紹了npm 設(shè)置同時從多個包源加載包的方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • node爬取新型冠狀病毒的疫情實時動態(tài)

    node爬取新型冠狀病毒的疫情實時動態(tài)

    這篇文章主要介紹了node爬取新型冠狀病毒的疫情實時動態(tài),非常不錯,本文通過實例代碼給大家講解的非常詳細,需要的朋友可以參考下
    2020-02-02
  • nodejs讀取圖片返回給瀏覽器顯示

    nodejs讀取圖片返回給瀏覽器顯示

    這篇文章主要為大家詳細介紹了nodejs讀取圖片返回給瀏覽器顯示,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • node中的Express框架詳解

    node中的Express框架詳解

    這篇文章主要介紹了node中的Express框架,框架是為了規(guī)范開發(fā)流程,降低開發(fā)難度,提高開發(fā)效率而制定的一套共人們使用的功能模塊或者是編程的約定,需要的朋友可以參考下
    2023-04-04
  • Nodejs把接收圖片base64格式保存為文件存儲到服務(wù)器上

    Nodejs把接收圖片base64格式保存為文件存儲到服務(wù)器上

    這篇文章主要介紹了Nodejs把接收圖片base64格式保存為文件存儲到服務(wù)器上,文中代碼較簡短,需要的朋友可以參考下
    2018-09-09
  • node.js模擬實現(xiàn)自動發(fā)送郵件驗證碼

    node.js模擬實現(xiàn)自動發(fā)送郵件驗證碼

    這篇文章主要為大家介紹了node.js模擬實現(xiàn)自動發(fā)送郵件驗證碼的實例過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-04-04
  • Node.js版本發(fā)布策略頻率與穩(wěn)定性的平衡

    Node.js版本發(fā)布策略頻率與穩(wěn)定性的平衡

    這篇文章主要為大家介紹了Node.js版本發(fā)布策略頻率與穩(wěn)定性的平衡,幫助大家大家更清晰了解node發(fā)展史,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • 基于nodejs實現(xiàn)微信支付功能

    基于nodejs實現(xiàn)微信支付功能

    這篇文章主要為大家詳細介紹了基于nodejs實現(xiàn)微信支付功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • NodeJs項目中關(guān)閉ESLint的方法

    NodeJs項目中關(guān)閉ESLint的方法

    ESLint是一個用來識別 ECMAScript 并且按照規(guī)則給出報告的代碼檢測工具,使用它可以避免低級錯誤和統(tǒng)一代碼的風格。這篇文章主要介紹了NodeJs項目中關(guān)閉ESLint的方法,需要的朋友可以參考下
    2018-08-08
  • NodeJS學習筆記之Module的簡介

    NodeJS學習筆記之Module的簡介

    模塊是Node.js 應(yīng)用程序的基本組成部分,文件和模塊是一一對應(yīng)的。換言之,一個 Node.js 文件就是一個模塊,這個文件可能是JavaScript 代碼、JSON 或者編譯過的C/C++ 擴展。
    2017-03-03

最新評論

崇阳县| 普兰县| 藁城市| 南平市| 兴仁县| 渑池县| 朝阳县| 渭南市| 盘锦市| 遵义县| 福安市| 宜川县| 衢州市| 临朐县| 阜康市| 宝应县| 开远市| 远安县| 小金县| 喀喇| 布拖县| 石柱| 鹤岗市| 中山市| 临颍县| 石棉县| 河池市| 嘉祥县| 游戏| 大姚县| 阳江市| 永兴县| 揭西县| 东海县| 礼泉县| 云梦县| 怀远县| 辽源市| 堆龙德庆县| 扶沟县| 永清县|