検索
ホームページウェブフロントエンドフロントエンドQ&Anodejs は複数の http リクエストを送信します

インターネットの発展、技術の進歩、インターネット アプリケーションの継続的な出現により、人々のネットワーク通信に対する需要はますます高まっています。これらのネットワーク通信の中で、http プロトコルが最も一般的な方式です。 nodejs では、http リクエストを簡単に送信してネットワーク通信を実現できます。この記事では、nodejsを使って複数のhttpリクエストを送信する方法を紹介します。

  1. http モジュール

nodejs では、http モジュールは http プロトコルを処理するために使用されるモジュールであり、HTTP サーバーとクライアントを作成するための実用的な API を提供します。 HTTP リクエスト、および HTTP リクエストの送信。

http モジュールを使用して http リクエストを送信するには、2 つのメソッドを使用できます。

  • http.request(options[, callback]): http リクエストを送信し、http を返すために使用されます。 ClientRequest リクエストの構成、リクエストの送信、および応答の処理のためのメソッドを提供するオブジェクト。
  • http.get(options[, callback]): http GET リクエストの送信に使用されます。このメソッドは、http.request メソッドのカプセル化です。リクエストは簡素化でき、リクエスト パラメータは URL 形式を使用して提供されます。
  1. Promise

非同期プログラミングは、nodejs の非常に一般的なプログラミング方法であることがわかっているため、Promise を使用して複数の http リクエストを非同期プログラミングすることができます。

Promise は将来の結果を表すオブジェクトであり、Promise 自体は関数パラメーターを受け取るコンストラクターです。関数には、成功と失敗のコールバック関数をそれぞれ表す、resolve と拒否という 2 つのパラメーターがあります。

Promise を使用する利点は、コールバック地獄の問題を解決し、コードをより読みやすく、保守しやすくできることです。

  1. async/await

ES6 で導入された async/await 構文シュガーにより、Promise を使用せずに非同期プログラミングを実装できるようになり、コードがより簡潔で明確になります。

async/await は実際に Promise を単純化してカプセル化します。async キーワードを使用して非同期関数を宣言し、await キーワードを使用して非同期操作の結果を待機します。これにより、プログラムの実行が可能になります。コールバック地獄の問題を避けるため。

以下では、Promise と async/await を使用して複数の http リクエストを送信します。

  1. Promise を使用して複数の http リクエストを送信する例

複数の Web サイトに対して http リクエストを開始し、これらの Web サイトから返された結果をマージしたいと想定します。

まず、以下に示すように、ターゲット URL とこれらのリクエストのリクエスト メソッド (ここでは GET メソッドを使用します) を格納する配列を作成します。

const targets = [
    {url: 'https://www.baidu.com', method: 'GET'},
    {url: 'https://www.google.com', method: 'GET'},
    {url: 'https://www.bing.com', method: 'GET'},
];

次に、受信する関数を定義します。ターゲット URL とリクエスト メソッド。http リクエストの送信とレスポンスの処理のための Promise オブジェクトを返します。この関数の実装は次のとおりです。

const http = require('http');

function sendRequest(target) {
    return new Promise((resolve, reject) => {
        const req = http.request(target, res => {
            let result = '';
            res.setEncoding('utf8');
            res.on('data', chunk => {
                result += chunk;
            });
            res.on('end', () => {
                resolve(result);
            });
        });
        req.on('error', err => {
            reject(err);
        });
        req.end();
    });
}

上記の関数では、http.request メソッドを使用して http リクエストを送信し、res.on('data', .. .) イベント処理関数 、res.on('end', ...) イベント処理関数を使用してレスポンス終了後のロジックを処理し、最終的に受信したレスポンス データを Promise の結果として返します。

次のコードを使用して、この関数が適切に動作しているかどうかをテストできます。

sendRequest({url: 'https://www.baidu.com', method: 'GET'})
    .then(result => {
         console.log(result);
     })
     .catch(err => {
          console.error('An error occurred:', err);
     });

これで、複数のターゲット URL とリクエスト メソッドを受け取り、複数の http リクエストを送信してその結果をマージするための Promise オブジェクトを返す関数を定義できるようになりました。関数の実装は次のとおりです:

function sendMultiRequests(targets) {
    return Promise.all(targets.map(target => {
        return sendRequest(target);
    }));
}

上記の関数では、Promise.all メソッドを使用して、複数の Promise オブジェクトを新しい Promise オブジェクトにカプセル化します。現在のすべての Promise が成功すると、返される Promise は次のようになります。いずれかの Promise が失敗すると、返された Promise も失敗します。

この関数を使用して、複数の http リクエストを送信し、その結果をマージできるようになりました。

sendMultiRequests(targets)
    .then(results => {
        console.log('All requests completed.');
        console.log('Results:');
        console.log(results);
    })
    .catch(err => {
        console.error('An error occurred:', err);
    });

すべての http リクエストが完了すると、結果が結合されて出力されます。

  1. async/await を使用して複数の http リクエストを送信する例

ES6 では、async/await 構文を使用して非同期プログラミングを実装できます。上記のコードは、async/await を使用して実装できます。この実装の核心は、Promise を非同期関数としてカプセル化し、await キーワードを使用して非同期操作の完了を待つことです。

以下は、async/await を使用して複数の http リクエストを送信する例です。

async function sendRequests(targets) {
    const results = await Promise.all(targets.map(async target => {
        const result = await sendRequest(target);
        return result;
    }));
    return results;
}

上記のコードでは、複数の http リクエストを送信し、その結果を待つ非同期関数 sendRequests を定義します。 Promise.all メソッドは Promise オブジェクトを返します。すべての Promise が成功すると、返された Promise も成功します。いずれかの Promise が失敗した場合、返された Promise も失敗します。 await キーワードを使用して Promise オブジェクトの完了を待ち、結果を results 配列に直接割り当てます。

次のコードを使用して、この非同期関数が適切に動作しているかどうかをテストできます。

sendRequests(targets)
    .then(results => {
        console.log('All requests completed.');
        console.log('Results:');
        console.log(results);
    })
    .catch(err => {
        console.error('An error occurred:', err);
    });

すべての http リクエストが完了すると、結果が結合されて出力されます。

  1. 概要

この記事では、nodejs を使用して複数の http リクエストを送信する 2 つの方法を紹介します。 1 つ目の方法は、Promise を使用して複数の http リクエストを送信し、その結果をマージすることです。 2 番目の方法は、async/await 構文シュガーを使用して複数の http リクエストを送信し、その結果を待つことです。 Promise を使用するか、async/await を使用するかに関係なく、複数の http リクエストの非同期プログラミングを簡単に実装でき、コードがより読みやすく、保守しやすくなります。

以上がnodejs は複数の http リクエストを送信しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Reactの限界は何ですか?Reactの限界は何ですか?May 02, 2025 am 12:26 AM

raceslimitationsinclude:1)asteeplearningcurveduetoitsvastecosystem、2)seochallengeswithsclient-siderEndering、3)潜在的なパフォーマンスのinlargeapplications、4)complenstatemanagementasappsgrow、and5)suneedtokeepupwithovolution

Reactの学習曲線:新しい開発者にとっての課題Reactの学習曲線:新しい開発者にとっての課題May 02, 2025 am 12:24 AM

ReactisChallengingを使用して、SteepLearNdParadigMshiftOconpontenAchitecture.1)startisofficialdocumentation forasolidfoundation.2)relondingjsxandjavascriptwithinit.3)LearntousefunctionalcompotontiTateを理解してください

反応の動的リストの安定したユニークなキーを生成する反応の動的リストの安定したユニークなキーを生成するMay 02, 2025 am 12:22 AM

coreChallengeingEneratingは、duniqueys consinistinsidentifientiversre-renderseforeffiencedomupdates.1)aseenaturalKeysisisisisisisisedisederiableiableiaibuniqueandStable.2)denatekeysBaseTheBasedOnMultipreattributive.2)を無効にすることを非難することを解決します

JavaScriptの疲労:Reactとそのツールで最新の状態を維持しますJavaScriptの疲労:Reactとそのツールで最新の状態を維持しますMay 02, 2025 am 12:19 AM

javascriptfatigueinReactismainageable with rikeislikedivedingingindininginginformationscors.1)whatyouneedwhenyouneedit、focusingonprojectrelevance.2)

UseState()フックを使用するコンポーネントをテストしますUseState()フックを使用するコンポーネントをテストしますMay 02, 2025 am 12:13 AM

ESTESTROACTCOMPONENTSINGTHESESTATEHOOK、USEJESTANDREACTINTINGLIBRARYTOSIMULATE INTERACTIONSIONDANDVERIFYISTAMESISINTHEUI.1)RENDERTHECONCENTANDCHECKECHINITATA.2)SimulateUserIractionSionsionsionsionsionsionslikeClickSorformSubmissions.3)

Reactのキー:パフォーマンスの最適化技術への深い飛び込みReactのキー:パフォーマンスの最適化技術への深い飛び込みMay 01, 2025 am 12:25 AM

keysinReactarecialforptimizingperformancebyididingineffictientListupdates.1)usekeystoidentifideidifyandtracklistelements.2)ArrayIndi​​cesassyStopreventPerformanceSues.3)suoseStableidedifierslikeItem.idtomaincomentaindtateandiproveperift

Reactのキーとは何ですか?Reactのキーとは何ですか?May 01, 2025 am 12:25 AM

ReactKeySareUniqueIdentifiersiersiderSuredStrovereconconiniationEfficiency.1)theyctrackChangesinListitems、2)sultanduniqueidentifiersiirsiTeemidssisssississmendを使用して、3)ArrayIndi​​cesAssayStopReventisSuseSUSEORINGを回避します

反応におけるユニークな鍵の重要性:一般的な落とし穴を避ける反応におけるユニークな鍵の重要性:一般的な落とし穴を避けるMay 01, 2025 am 12:19 AM

sinqueysarecrucialinReactforoptimizing andMaintainingcomponentStateIntegrity.1)useanaturaluniqueidentifierfromyourdataifaibable.2)ifnonaturalidentifierexists、発電済みのKeyusingingingingalibrarylikuuid.3)

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい