1、分析を開始します
皆さんこんにちは。今日の記事は主に「Connect」ミドルウェアと関連する補助ミドルウェアに関するソースコード解析シリーズについてです。前回の記事
も読んでいただいたと思います。この記事は、読者の方がより深く理解できるように、使用方法と目的を紹介していますが、分析段階で間違っている点があれば、アドバイスをお願いします。
わかりました!いつものように、本題に入りましょう。まず、次のような導入分析と組み合わせた例を見てみましょう:
2 番目の行ごとの分析:
(1) の最初の行では、「connect」モジュールを導入し、connect を通じて http|https サーバーを作成し、http サーバーのすべての機能を提供します。
「connect」ミドルウェアを使用すると、さまざまな方法で「サーバー」を作成できます。
では、どのように行われるのでしょうか? ソースコードを参照してください:
"createServer" をグローバル "exports" にマウントし、次に "createServer" 属性を拡張して再度マウントします。目的は、ネイティブの記述形式
と互換性を持たせることです。さまざまな方法で創作の目的を達成します。これは、誰もが日々の開発において学ぶことができるアイデアでもあります。
(2) 2 行目の「connect.createServer」を見て、その動作を見てみましょう。次のソース コードを参照してください。
(3)、引き続き 3 行目の「app.use()」を見てください。何が行われるのか、次のソース コードを見てください。
"connect" は "http サーバー" から継承されたプロトタイプであり、サーバーの requestListener を使用するミドルウェアに置き換えます。
「connect.use(route, handle)」を使用してミドルウェアを各ルートに追加します。これらのミドルウェア「ハンドル」は「リクエスト」があるたびに「ルート」にバインドされ、「スタック」に保存されます。リクエストしました、
このヒープを走査し、「ルート」に対応する「ハンドル」を見つけて、「ハンドル」を実行します。「ハンドル」が最終的に「next()」を呼び出すと、引き続き次の一致する「ハンドル」を見つけて実行します。
「ハンドル」をカプセル化することで、「接続」に基づいてさらに「ミドルウェア」を簡単に追加できます。
(4)、最後に「listen(8888)」を見てみましょう。これは何をするものでしょうか?
これは非常に簡単です。基になるサーバー オブジェクトを継承することで、特定のポートでリッスンする「リッスン」機能が与えられます。
Server.prototype.__proto__ = http.Server.prototype
以下は、「connect.js」のソース コード全体です。スペースを節約するために、すべてのコメントが削除されています。
追加:
「ミドルウェア」オブジェクトを「エクスポート」し、「ミドルウェア」オブジェクトにメソッドをループ定義します。このメソッドは、「ミドルウェア」フォルダー内の .js ファイル モジュールを直接読み込みます。
使用: "exports.utils.merge(exports,exports.middleware)" この文はミドルウェア内のメソッドを直接エクスポートします。
3 つを要約すると、
(1) ソース コードの設計意図を理解することは、アプリケーションでの利点を最大化するのに役立ちます。
(2) ソースコードを見るときは、文法的な詳細に注意を払う前に、プロセスを理解してください。
(3) ソースコードの賢明な実装アイデアから学びますが、過剰な設計はせず、設計のための設計を行います。
(4)、明日も引き続き関連ミドルウェアの解析を行い、アップデートを継続していきます。 。 。 。 。 。