[解決済み] Node.jsのConnect、Express、「ミドルウェア」って何?
質問
JavaScriptをよく理解しているにもかかわらず、以下のような混乱があります。 まさに Node.jsのエコシステムにあるこれら3つのプロジェクトは、何をするものなのでしょうか。RailsのRackのようなものでしょうか?誰か説明してください。
どのように解決するのですか?
[ 更新してください。 4.0 リリースで、Express は Connect を使用しなくなりました。しかし、ExpressはConnect用に書かれたミドルウェアと互換性があります。元の回答は以下のとおりです]。
Node.jsを検討している人にとって、これは間違いなく混乱の元となるポイントなので、質問してくれてうれしいです。以下は、その説明のための私のベストショットです。
-
Node.js自体は http モジュールで、その
createServer
メソッドは、HTTPリクエストに応答するために使用できるオブジェクトを返します。このオブジェクトはhttp.Server
プロトタイプを使用します。 -
接続 も提供しています。
createServer
の拡張版を継承したオブジェクトを返すメソッドです。http.Server
. Connectの拡張機能は、主に以下のようなプラグインを容易にするためにあります。 ミドルウェア . そのため、Connect は自らをミドルウェアフレームワークと呼び、Ruby の Rack に例えられることが多い。 -
エクスプレス は、Connect が http モジュールに対して行っていることを、Connect に対して行っています。それは
createServer
メソッドは、Connect のServer
プロトタイプを使用します。つまり、Connectのすべての機能がそこにあるのです。 プラス ビューレンダリングと、ルートを記述するための便利なDSLを提供します。RubyのSinatraは良いアナロジーです。 -
それから、さらに進んでExpressを拡張したフレームワークもありますよ。 Zappa 例えば、CoffeeScript、サーバーサイドのjQuery、そしてテストのサポートが統合されています。
ここで、「ミドルウェア」という言葉の意味を具体的に説明します。このままでは、上記のどれもが静的ファイルを提供してくれません。しかし、ただ
connect.static
(Connectに付属するミドルウェア)で、あるディレクトリを指すように設定すれば、サーバーはそのディレクトリ内のファイルへのアクセスを提供します。なお、ExpressはConnectのミドルウェアも提供しています。
express.static
と同じです。
connect.static
. (どちらも
staticProvider
つい最近まで)
Expressが追加する機能は非常に便利であり、必要であれば低レベルの機能もすべてそのまま利用できます。
関連
-
[解決済み] package.jsonのチルダ(~)とキャレット(^)の違いは何ですか?
-
[解決済み] Node.jsのプログラムにコマンドライン引数を渡すにはどうしたらいいですか?
-
[解決済み] npm installの-saveオプションは何ですか?
-
[解決済み] Node.jsを使うタイミングをどう判断するか?
-
[解決済み] Node.jsで終了する方法
-
[解決済み] Node.jsでファイルを書き込む
-
[解決済み] Node.jsのmodule.exportsの目的と使い方を教えてください。
-
[解決済み] Node.js + Nginx - 今度は何?
-
[解決済み] 一般的に、Node.jsは10,000の同時リクエストをどのように処理するのですか?
-
[解決済み] Node.jsプロジェクトのフォルダ構造
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】「安全なTLS接続が確立される前にクライアントのネットワークソケットが切断されました」(ノード10
-
[解決済み】Node Version Manager のインストール - nvm コマンドが見つかりません。
-
[解決済み】Mongooseで、日付でソートするにはどうしたらいいですか?(node.js)
-
[解決済み】AWS lambda function エラー - モジュール 'index' をインポートできません。エラー
-
[解決済み] AWS lambda function error - Unable to import module 'index': エラー
-
[解決済み] のエラーが発生しました。これはおそらくnpmの問題ではありません。上に追加のログ出力があると思われます
-
[解決済み] nodejsでfindAllのソート順を続編にする
-
[解決済み] ExpressJS : res.redirect()が期待通りに動作しない?
-
[解決済み] エラーです。Expressでビューの検索に失敗しました
-
[解決済み] ノードのバージョンを管理するためのnまたはnvm - 各バージョンのグローバルモジュールを保持することは良いアイデアですか?