nodejsのポストリクエストとレスポンス

王林
リリース: 2023-05-14 09:25:08
オリジナル
1941 人が閲覧しました

Node.js は、Chrome V8 JavaScript エンジンに基づく非同期イベント駆動型 JavaScript ランタイム環境です。これを使用すると、効率的な Web アプリケーションを開発できます。その 1 つは、HTTP プロトコルを介したデータ対話です。 HTTP プロトコルでは、GET リクエストと POST リクエストが最も一般的な 2 つのリクエスト メソッドです。この記事では主にNode.jsでPOSTリクエストとレスポンスを実装する方法を紹介します。

1. HTTP リクエストとレスポンスの基本

POST リクエストとレスポンスを作成する前に、まず HTTP リクエストとレスポンスの基本概念を理解する必要があります。 HTTP では、リクエストはリクエスト行、リクエストヘッダー、リクエスト本文の 3 つの部分で構成されます。応答も、ステータス行、応答ヘッダー、応答本文の 3 つの部分で構成されます。

リクエスト行には、リクエストメソッド、リクエストされた URL、HTTP プロトコルのバージョン番号が含まれます。リクエスト ヘッダーには、Accept、Content-Type、Authorization などのリクエスト関連のメタ情報が含まれます。リクエスト本文には特定のリクエスト データが含まれます。POST リクエストの場合、リクエスト本文には送信されたフォーム データが含まれます。

応答ステータス行には、HTTP プロトコルのバージョン番号、ステータス コード、およびステータスの説明が含まれます。応答ヘッダーには、Content-Type、Cache-Control、Set-Cookie などの応答関連のメタ情報が含まれます。応答本文には、サーバー応答のデータが含まれます。

2. Node.js の POST リクエスト

Node.js では、HTTP モジュールを使用して HTTP リクエストを処理できます。 http.createServer() メソッドを使用して HTTP サーバーを作成し、request.on() メソッドを使用してリクエスト イベントをリッスンし、リクエスト オブジェクトを取得します。リクエストメソッド、URL、リクエストヘッダ、リクエストボディなどの情報は、リクエストオブジェクトを通じて取得できます。

POST リクエストの場合、リクエスト オブジェクトのデータ イベントと終了イベントを通じてリクエスト本文のデータを監視する必要があります。このうち、データ イベントは複数回トリガーされ、そのたびにリクエスト本文のデータの一部が渡されます。データ イベント コールバック関数でこれらのデータを結合することにより、完全なリクエスト本文データが取得されます。終了イベントのコールバック関数では、リクエスト本体のデータをさらに処理できます。

以下は、POST リクエストを処理して応答を返す機能を実装する簡単な Node.js の例です。

const http = require('http');

http.createServer(function (request, response) {
    if (request.method === 'POST') {
        let body = '';
        request.on('data', function (data) {
            body += data;
        });
        request.on('end', function () {
            console.log('POST请求体数据为:', body);
            response.end('POST请求成功!');
        });
    } else {
        response.end('暂不支持除POST外的其他请求方式!');
    }
}).listen(8888);
console.log('服务器启动成功!');
ログイン後にコピー

このコードは、HTTP サーバーを作成し、ポート 8888 をリッスンします。 POSTリクエストを受信した場合はリクエストボディのデータを結合してコンソールに出力しますが、その他のリクエストを受信した場合は「POST以外のリクエストメソッドはまだサポートされていません!」という応答メッセージが返されます。たとえば、curl コマンドを使用して POST リクエストをシミュレートできます。

curl -X POST -d 'hello post request' http://localhost:8888
ログイン後にコピー
ログイン後にコピー

このコマンドは、POST リクエストを http://localhost:8888 に送信し、データ hello post リクエストをリクエスト本文として使用します。

3. Node.js での POST 応答

POST リクエストに対する応答の場合、response.write() メソッドを使用して応答データを応答本文に書き込みます。応答データが多い場合は、response.write() メソッドを使用して応答データの一部を複数回書き込み、最後に response.end() メソッドを使用して残りのデータを書き込み、応答を完了します。 response.end() メソッドは 1 回しか呼び出せないことに注意してください。

次は、POST リクエストを処理して応答を返す機能を実装する簡単な Node.js の例です:

const http = require('http');

http.createServer(function (request, response) {
    if (request.method === 'POST') {
        let body = '';
        request.on('data', function (data) {
            body += data;
        });
        request.on('end', function () {
            console.log('POST请求体数据为:', body);
            response.writeHead(200, {'Content-Type': 'text/plain'});
            response.write('收到POST请求,请求体为:' + body);
            response.end();
        });
    } else {
        response.writeHead(200, {'Content-Type': 'text/plain'});
        response.end('暂不支持除POST外的其他请求方式!');
    }
}).listen(8888);
console.log('服务器启动成功!');
ログイン後にコピー

このコードは、HTTP サーバーを作成し、POST リクエストを処理する機能を実装します。 POSTリクエストを受信した場合はリクエストボディのデータをコンソールに出力し、受信したデータをレスポンスとしてクライアントに返しますが、それ以外のリクエストを受信した場合は「POST以外のリクエストメソッドはまだサポートされていません!」というレスポンスが返されます。情報。たとえば、curl コマンドを使用して POST リクエストをシミュレートできます。

curl -X POST -d 'hello post request' http://localhost:8888
ログイン後にコピー
ログイン後にコピー

このコマンドは、POST リクエストを http://localhost:8888 に送信し、データ hello post リクエストをリクエスト本文として使用します。サーバーは受信したデータを変更せずに返します。

4. 概要

この記事では、Node.js で POST リクエストとレスポンスを処理する方法を紹介します。 POSTリクエストを行う場合は、リクエストボディデータのデータイベントと終了イベントを監視してリクエストデータを処理する必要があり、レスポンスを行う場合は、response.write()メソッドを使用してレスポンスデータをレスポンスボディを作成し、最後にレスポンスを使用します。end() メソッドはレスポンスを終了します。 HTTP プロトコルの基本を理解することで、Node.js の POST リクエストと応答についてより深く理解できるようになります。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート