真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Node.js中如何發(fā)起HTTP請求

這篇文章主要介紹Node.js中如何發(fā)起HTTP請求,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

創(chuàng)新互聯(lián)建站-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比南溪網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式南溪網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋南溪地區(qū)。費用合理售后完善,十余年實體公司更值得信賴。

正文

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)上有些許復(fù)雜,因為我們要弄一個空數(shù)組list來存儲請求數(shù)據(jù)塊chunk,然后在請求結(jié)束后還要通過Buffer處理數(shù)據(jù)再解析成json格式。

Node.js中如何發(fā)起HTTP請求

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,可以說是非常的簡潔與方便。

Node.js中如何發(fā)起HTTP請求

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里拿到了,也是十分的好用。

Node.js中如何發(fā)起HTTP請求

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格式。

Node.js中如何發(fā)起HTTP請求

如果你想使用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.js中如何發(fā)起HTTP請求

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用起來完全一樣,沒有任何學習壓力。

Node.js中如何發(fā)起HTTP請求

對比

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

Node.js中如何發(fā)起HTTP請求

現(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它替換成其他的方法。

Node.js中如何發(fā)起HTTP請求

以上是“Node.js中如何發(fā)起HTTP請求”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


網(wǎng)頁名稱:Node.js中如何發(fā)起HTTP請求
網(wǎng)頁URL:http://weahome.cn/article/ispjed.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部