1. ホーム
  2. node.js

[解決済み] Node.jsのConnect、Express、「ミドルウェア」って何?

2022-03-15 01:38:15

質問

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が追加する機能は非常に便利であり、必要であれば低レベルの機能もすべてそのまま利用できます。