ホームページ ウェブフロントエンド jsチュートリアル Node.js_node.jsのHTTPモジュールとイベントモジュールの詳細説明

Node.js_node.jsのHTTPモジュールとイベントモジュールの詳細説明

May 16, 2016 pm 04:31 PM
httpモジュール node.js

Node.js http サーバー

Node.js を使用すると、HTTP モジュールの低レベル API を使用してサーバーとクライアントを作成できます。初めてノードの学習を開始したとき、誰もが次のコードに遭遇するでしょう:

コードをコピーします コードは次のとおりです:

var http = require('http');
http.createServer(function (req,res) {
res.end('Hello Worldn');
}).listen(3000,"127.0.0.1");
console.log("サーバーが http://127.0.0.1:3000 で動作しています");

このコードには、http モジュールに関する情報が含まれています。つまり、

1. `Node.js` のコアから HTTP モジュールをリクエストし、それを将来のスクリプトで使用するための変数に割り当てます。
その後、スクリプトは「Node.js」を介して「HTTP」を使用するためのメソッドにアクセスできるようになります。

2. `createServer` を使用して新しい Web サーバー オブジェクトを作成します

3. スクリプトは匿名関数をサーバーに渡し、Web サーバー オブジェクトにリクエストを受信するたびに何が起こるかを伝えます

4. スクリプトの 4 行目は Web サーバーのポートとホストを定義します。これは、`http://127.0.0.1:3000` を使用できることを意味します
サーバーにアクセスするため

HTTP ヘッダー

HTTP リクエストとレスポンスごとに、HTTP ヘッダーが送信されます。HTTP ヘッダーは、コンテンツ タイプ、サーバーがレスポンスを送信した日付、HTTP ステータス コードなどの追加情報を送信します。

http ヘッダーには多くの情報が含まれています。以下は、私の Baidu ホームページに含まれる http ヘッダー情報です。

Baidu ホームページにさらに Web サイトを追加したため、ここのデータは読者のデータと異なる可能性があります。このことから、Baidu の Web サーバーは BWS/1.1

であることがわかります。

上記のコードの http ヘッダー情報は次のとおりです:

Node.js のリダイレクト

ノードでは、訪問者を別の Web ページにリダイレクトするための単純なサーバーを簡単に作成できます。ガイドラインは次のとおりです。

1. 301 応答コードを顧客に送信して、リソースが別の場所に移動されたことを伝えます。 2. ロケーションヘッダーを送信して、クライアントにリダイレクト先を伝えます。

関連するコードは次のとおりです:

コードをコピーします コードは次のとおりです:
var http = require('http');
http.createServer(function (req,res) {
res.writeHead(301,{
「場所」:「http://example-2.com/web」
});
res.end();
}).listen(3000,'127.0.0.1');
console.log("サーバーが
http://127.0.0.1:3000 で動作しています");
ブラウザを開いて

http://127.0.0.1:3000 ページがリダイレクトされます。

さまざまなリクエストに応答します

Node.js は単一の応答を作成できるだけでなく、複数の種類のリクエストに対して、アプリケーションにいくつかのルートを追加する必要があります。 Node では、URL モジュールを使用することでこれを簡単に実現します。 URL モジュールを使用すると、URL を読み取り、解析し、出力に対して何らかの処理を行うことができます。

コードをコピーします コードは次のとおりです:
var url = require('url');
var requestURL = "
http://example.com:1234/path?query=string#hash"
これで、リクエストされた URL を分析し、そこからコンテンツを抽出できるようになります。たとえば、次のように入力してホスト名を取得します。

コードをコピーします コードは次のとおりです:
url.parse(requestURL).hostname

この時点で、彼は「example.com」に戻ります

ポート番号を取得するには、次のように入力します:

コードをコピーします コードは次のとおりです:
url.parse(requestURL).port


彼は「1234」を返します

イベントモジュール

Node.js は同時実行性を実現する最良の方法と考えられています。 Events モジュールは Node.js の中核であり、イベントを中心とした機能を設計するために他の多くのモジュールで使用されます。 Node.js は単一スレッドで実行されるため、同期コードはブロックされます。したがって、Node.js コードを記述するときは、いくつかの簡単なルールを考慮する必要があります。

1. ブロックしない - 「Node.js」はシングルスレッドであり、コードがブロックすると他のすべてが停止します
2. 迅速な復帰 – 操作は迅速に復帰する必要があります。すぐに戻れない場合は、別のプロセスに移動する必要があります
イベント モジュールを使用すると、開発者はイベントのリスナーとハンドラーを設定できます。クライアント JS では、クリック イベントのリスナーを設定し、イベントの発生時に何かを行うことができます:

コードをコピーします コードは次のとおりです:

var tar = document.getElementById("ターゲット");
tar.addEventListener("クリック", function () {
alert("クリックイベントが発生しました、ターゲットがクリックされました"); },false);

もちろん、これは IE の互換性を考慮していない例です。Node.js の主要なイベントは、次のようなネットワーク イベントです。

1. Web サーバーからの応答

2. ファイル

からデータを読み取ります 3. データベースからデータを返します
イベント モジュールを使用するには、まず新しい EventEmitter インスタンスを作成する必要があります:

コードをコピーします コードは次のとおりです:
var EventEmitter= require('events').EventEmitter;
var test = new EventEmitter();


上記の内容をコードに追加すると、次のようにイベントとリスナーを追加できます。

コードをコピーします コードは次のとおりです:
test.emit('msg','ノードによって送信されたメッセージ');


最初のパラメータは、リスナーのマッチングに使用できるようにイベントを説明する文字列です

メッセージを受信するには、イベントがトリガーされたときにイベントを処理するリスナーを追加する必要があります。例:

コードをコピーします コードは次のとおりです:
test.on('メッセージ',function(data){
console.log(データ);
});


Events モジュールは、addListener/on、once、removeListener、removeAllListeners、emit などの基本的なイベント リスニング モード メソッドを実装します。これは、バブリングやレイヤーごとのキャプチャなどの DOM に属するイベント動作がなく、preventDefault などのイベント配信を処理するメソッドがないため、フロントエンド DOM ツリー上のイベントとは異なります。 ()、stopPropagation()、stopImmediatePropagation() など。

1. クラス: events.EventEmitter: require('events').EventEmitter を通じて EventEmitter クラスを取得します。

2.emitter.on(event,listener): 特定のイベントのリスナー配列の末尾にリスナーを追加します。 チェーン呼び出しを容易にするためにエミッターを返します。以下も同様です。


3.emitter.removeListener(event,listener) はイベントのリスナー配列からリスナーを削除します

4.emitter.listeners(event) は、指定されたイベントのリスナー配列を返します

詳細については、Node.js API ドキュメント

を参照してください。
次のコードは、5 秒以内に自己破壊される可能性のある機密メッセージを示しています。

コードをコピーします コードは次のとおりです:
var EventEmitter = require('events').EventEmitter;
var secretMessage = new EventEmitter();

secretMessage.on('メッセージ', 関数 (データ) { コンソール.ログ(データ); });


secretMessage.on('自己破壊', function () {
console.log('メッセージは破棄されました!');

});


secretMessage.emit('メッセージ','これは秘密のメッセージです。5秒以内に自己破壊されます');

setTimeout(function() {

SecretMessage.emit('自己破壊');

},5000);


このスクリプトでは、2 つのイベントが送信され、2 つのリスナーがあります。スクリプトが実行されると、メッセージ イベントが発生し、「メッセージ」ハンドラー

によって処理されます。

EventEmitter は Node.js のあらゆる場所で使用されるため、使いこなすことが重要です。 Node.js は I/O 操作を通じてデータを取得し、イベント モジュールを広範囲に使用して非同期プログラミングをサポートします

よくある質問:

Q: イベントの最大リスナー数に制限はありますか?
回答: デフォルトでは、イベントに 10 個のリスナーが操作されている場合、警告が発行されます。ただし、この数値は、emitter.setMaxListener(n)

を使用して変更できます。

Q: 送信されたすべてのイベントを聞くことはできますか?
答え: いいえ。応答したいイベントごとにリスナーを作成する必要があります

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

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Nodeのメモリ制御に関する記事 Nodeのメモリ制御に関する記事 Apr 26, 2023 pm 05:37 PM

Nodeのメモリ制御に関する記事

Node V8 エンジンのメモリと GC の詳細な図による説明 Node V8 エンジンのメモリと GC の詳細な図による説明 Mar 29, 2023 pm 06:02 PM

Node V8 エンジンのメモリと GC の詳細な図による説明

Node.js 19 が正式リリースされました。その 6 つの主要な機能についてお話しましょう。 Node.js 19 が正式リリースされました。その 6 つの主要な機能についてお話しましょう。 Nov 16, 2022 pm 08:34 PM

Node.js 19 が正式リリースされました。その 6 つの主要な機能についてお話しましょう。

Node の File モジュールについて詳しく説明しましょう Node の File モジュールについて詳しく説明しましょう Apr 24, 2023 pm 05:49 PM

Node の File モジュールについて詳しく説明しましょう

最適な Node.js Docker イメージを選択する方法について話しましょう。 最適な Node.js Docker イメージを選択する方法について話しましょう。 Dec 13, 2022 pm 08:00 PM

最適な Node.js Docker イメージを選択する方法について話しましょう。

ノードがnpmコマンドを使用できない場合はどうすればよいですか? ノードがnpmコマンドを使用できない場合はどうすればよいですか? Feb 08, 2023 am 10:09 AM

ノードがnpmコマンドを使用できない場合はどうすればよいですか?

Node.js の GC (ガベージ コレクション) メカニズムについて話しましょう Node.js の GC (ガベージ コレクション) メカニズムについて話しましょう Nov 29, 2022 pm 08:44 PM

Node.js の GC (ガベージ コレクション) メカニズムについて話しましょう

Nodeのイベントループについて話しましょう Nodeのイベントループについて話しましょう Apr 11, 2023 pm 07:08 PM

Nodeのイベントループについて話しましょう

See all articles