ホームページ  >  記事  >  ウェブフロントエンド  >  ノードが HTTP リクエストを開始する 6 つの方法の簡単な分析

ノードが HTTP リクエストを開始する 6 つの方法の簡単な分析

青灯夜游
青灯夜游転載
2022-12-09 20:08:203783ブラウズ

Node で HTTP リクエストを開始するにはどうすればよいですか?この記事では、HTTP リクエストを開始するための Node の 6 つの異なるメソッドについて説明します。

ノードが HTTP リクエストを開始する 6 つの方法の簡単な分析

この記事では、nodejs で HTTP リクエストを開始する 6 つの異なる方法を紹介します。ここでは、 リクエストについて詳しく見ていきます。 Jin Community のセクション分類インターフェイス は、それぞれの異なるメソッドの使用を完了するためのデモンストレーションとして使用されます。もちろん、取得したデータをより鮮明に印刷するには、chalk ライブラリをインストールする必要があります 事前に印刷したデータに色を追加してください。いよいよ開始します~ [関連チュートリアルの推奨事項: nodejs ビデオ チュートリアル プログラミング教育 ]

Text


Node.js HTTPS モジュール
ノード。 js 標準ライブラリには https モジュールがあるため、リクエストを開始するためにライブラリを導入する必要はありません。node.js 自体で実行できるため、いくつかの単純なデータ リクエストを処理するには十分です。

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

リクエスト データ ブロック チャンクを格納する空の配列リストを作成する必要があり、リクエストが完了した後、データをバッファを通じて処理して解析する必要があるため、構造は少し複雑です。 json形式に変換します。

ノードが HTTP リクエストを開始する 6 つの方法の簡単な分析

Axiosフロントエンドの友人は axios をよく知っていると思います。非常に人気があり、人気の Promise リクエスト ライブラリです。ブラウザとクライアントの両方で利用でき、インターセプタや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 リクエストを直接使用してインターフェイスをリクエストします。構造は Promise の形式にすることもでき、データは自動的に json に解析されます。シンプルで便利。

ノードが HTTP リクエストを開始する 6 つの方法の簡単な分析

Got

got は、「Node 用のユーザーフレンドリーで強力な HTTP リクエスト」であると主張しています。 js「ライブラリ」は、Promise スタイルの API と JOSN 処理構成関数を使用しているため、使いやすいですが、HTTP2 サポート、ページング API、RFC キャッシュなどの一部の機能は、ほとんどのリクエスト ライブラリでは利用できません。

次のコマンドを使用して 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'}

を設定する必要があります。その後、返されたデータを本文で取得できます。これも非常に簡単です。使用。

ノードが HTTP リクエストを開始する 6 つの方法の簡単な分析#Needle

##needle は比較的シンプルでコンパクトなリクエスト ライブラリで、その形式は Promise メソッドにすることができます。自分の習慣に応じてコールバック関数にすることもでき、その戻り値は XML と JSON を自動的に変換してくれるので、これも非常に便利です。 次のコマンドを使用してニードルをインストールできます:

npm i -S 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)}`);
    })
})
ここでは、コールバック関数の使用を示します。戻り値には err と res が含まれていることがわかります。成功した場合、err は null です。成功後に返される res の本体は、要求されるデータです。 . ここでは、自動的に変換された json 形式を支援する方法を説明します。

#Promise を使用したい場合は、次のように記述できます:

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

Superagentノードが HTTP リクエストを開始する 6 つの方法の簡単な分析

##リクエスト ライブラリ スーパーエージェントは、2011 年に遡るかなり早い時期にリリースされましたが、同じ API を備えた Node.js モジュールを使用して多くの高度な HTTP クライアント機能をサポートする、進歩的なクライアント HTTP リクエスト ライブラリです。

次のコマンドを使用してスーパーエージェントをインストールできます:
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);
});

现在的superagent用法与axios十分的相似,但是需要去自己把数据处理成json格式。

ノードが HTTP リクエストを開始する 6 つの方法の簡単な分析

Node-fetch

顾名思义,这个请求库它的api与window.fetch保持了一致,也是promise式的。最近非常受欢迎,但可能最大的问题是,它的v2与v3版差异比较大,v2保持着cjs标准,而v3则用了ejs的方式,升级后可能造成一些困扰,所以为了统一这个标准我们这里用了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用起来完全一样,没有任何学习压力。

ノードが HTTP リクエストを開始する 6 つの方法の簡単な分析

对比


接下来我们看一下关于这几款请求库近一年的下载量趋势图:

ノードが HTTP リクエストを開始する 6 つの方法の簡単な分析

现在我们可以发现,就下载量而言,在过去一年中,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

这里我们又统计了这几个库的其他一些数据,axios的star数量可谓一骑绝尘,远远超过其他几个库。

结语

这些请求库,他们都做了同一件事都可以发起HTTP请求,或许写法会有些许不同,但都是条条大路通罗马。就个人而言,也可能是经常写浏览器端的缘故,所以是axios的忠实用户,不管是练习还是开发axios都是首选,当然node-fetch也越来越收到关注,包也十分的小,练习的时候也会经常用到,但api使用起来感觉还是没有axios那般方便。

其实还有两个出名的HTTP请求库本文没有提到:

一个是ky.js,它是一个非常小巧且强大的fetch式的请求库,主要为deno和现代浏览器所打造,所以暂时不参与其中的讨论,感兴趣的同学自己探索。

另一个就是request.js,没有说的原因是它在2020年的时候就已经被完全弃用了,如果有使用过的小伙伴可以在把项目里的request它替换成其他的方法。

ノードが HTTP リクエストを開始する 6 つの方法の簡単な分析

更多node相关知识,请访问:nodejs 教程

以上がノードが HTTP リクエストを開始する 6 つの方法の簡単な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjuejin.cnで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。