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

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

高洛峰
高洛峰オリジナル
2016-12-26 10:01:461005ブラウズ

Node.js 用の http サーバー

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

var http = require('http');
http.createServer(function (req,res) {
    res.end('Hello World\n');
}).listen(3000,"127.0.0.1");
console.log("Server funning at http://127.0.0.1:3000");

このコードには、http モジュールに関する情報が含まれています。これは、次のことを意味します:

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

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

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

4. Web サーバーのポートとホストを定義します。これは、「http://127.0.0.1:3000」を使用してサーバーにアクセスできることを意味します

Http ヘッダー

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

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

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

ありがとうございます 百度ホームページにはさらに多くのウェブサイトが追加されているため、ここのデータは読者とは異なる場合があります。このことから、Baidu の Web サーバーは BWS/1.1 であることがわかります

以下は、上記のコードの http ヘッダー情報です:

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

Node.js でリダイレクト

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

1. リソースが別の場所に移動されたことをクライアントに通知する
2.リダイレクトする場所。

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

var http = require('http');
http.createServer(function (req,res) {
    res.writeHead(301,{
        'Location':'Http://example-2.com/web'
    });
    res.end();
}).listen(3000,'127.0.0.1');
console.log("Server funning at 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("target");
tar.addEventListener("click", function () {
   alert("click event fired,target was clicked"); 
},false);

もちろん、これは IE の互換性を考慮していない例であり、Node.js に焦点を当てたイベントは、次のようなネットワーク イベントがより一般的です。 :

1. Web サーバーからの応答
2. ファイルからデータを読み取る
3. データベースからデータを返す
Events モジュールを使用して、まず新しい EventEmitter インスタンスを作成する必要があります。コードでは、イベントとリスナーを追加できます。たとえば、次のようにイベントを送信できます。

var EventEmitter= require('events').EventEmitter;
var test = new EventEmitter();

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

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

test.emit('msg','the message send by node');

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('message', function (data) {
   console.log(data); 
});
secretMessage.on('self destruct', function () {
    console.log('the msg is destroyed!');
});
secretMessage.emit('message','this is a secret message.It will self deatruct in 5s');
setTimeout(function () {
   secretMessage.emit('self destruct');
},5000);

在这段脚本中,发送了两个事件,有两个侦听器。当脚本运行时,消息事件就发生,并由“message”处理器处理

在Node.js中到处都用EventEmitter,所以掌握它是很重要的。Node.js通过I/O操作获得的数据并广泛使用Events模块来支持异步编程

常见问题解答:

问:对于一个事件是否有最大侦听器数量的限制?
答:默认情况下,如果事件有操作10个侦听器,它会发出警告。不过,可以使用emitter.setMaxListener(n)来更改这个数量

问:是否可以侦听所有发送出来的事件?
答:不能。我们需要给每个想要响应的事件创建侦听器

更多Node.jsのHTTPモジュールとイベントモジュールの詳細説明相关文章请关注PHP中文网!

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