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 ヘッダーの情報です。 :
ありがとうございます 百度ホームページにはさらに多くのウェブサイトが追加されているため、ここのデータは読者とは異なる場合があります。このことから、Baidu の Web サーバーは BWS/1.1 であることがわかります
以下は、上記のコードの 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中文网!