JavaScriptを非常によく知っているにもかかわらず、Node.jsエコシステム内のこれら3つのプロジェクトが正確にすることを混同しています。それはRailsのラックのようなものですか?誰かが説明してもらえますか?
[更新:Express 4.0では、Connectは使用されなくなりました。しかし、ExpressはConnect用に書かれたミドルウェアとはまだ互換性があります。私の最初の答えは以下です。]
Node.jsを見ている人々にとって間違いなく一般的な混乱の原因となるので、この点について質問していただきありがとうございます。これを説明するのが私のベストショットです。
Node.js自体は http モジュールを提供します。このモジュールのcreateServer
メソッドはHTTPリクエストに応答するために使用できるオブジェクトを返します。そのオブジェクトはhttp.Server
プロトタイプを継承しています。
Connect は、http.Server
の拡張バージョンを継承したオブジェクトを返すcreateServer
メソッドも提供します。 Connectの拡張機能は主に、ミドルウェア の接続を簡単にするためにあります 。 Connectがそれ自体を「ミドルウェアフレームワーク」と表現し、Rubyのラックにたとえられることが多いのはそのためです。
Express はConnectがhttpモジュールに対して行うことをConnectに行います。ConnectのcreateServer
プロトタイプを拡張するServer
メソッドを提供します。そのため、Connectのすべての機能、およびビューレンダリング、およびルートを記述するための便利なDSLがあります。 RubyのSinatraは良い例えです。
それから、さらに進んでExpressを拡張する他のフレームワークがあります。 たとえば、Zappa 。これは、CoffeeScript、サーバーサイドのjQuery、およびテストのサポートを統合しています。
これが「ミドルウェア」が意味するものの具体的な例です。箱から出してすぐに、上記のどれもあなたのために静的ファイルを提供しません。しかし、ディレクトリを指すように設定されたconnect.static
(Connectに付属のミドルウェア)を投入するだけで、あなたのサーバはそのディレクトリのファイルへのアクセスを提供します。 ExpressはConnectのミドルウェアも提供しています。 express.static
はconnect.static
と同じです。 (どちらも最近までstaticProvider
として知られていました。)
私の印象は、最近のほとんどの "本物の" Node.jsアプリケーションはExpressで開発されているということです。それが追加する機能は非常に便利です、そしてあなたがそれを望むならば、低レベルの機能の全てはまだそこにあります。
受け入れられた答えは本当に古い(そして今では間違っています)。以下は、Connect(3.0)/ Express(4.0)の現在のバージョンに基づいた情報です(ソース付き)。
http / httpscreateServer
これは単純にコールバック(req、res)を取ります。
var server = http.createServer(function (request, response) {
// respond
response.write('hello client!');
response.end();
});
server.listen(3000);
ミドルウェアは、基本的に、アプリケーションコードと低レベルAPIの間にあるソフトウェアです。 Connectは、組み込みのHTTPサーバー機能を拡張し、プラグインフレームワークを追加します。プラグインはミドルウェアとして機能するため、接続はミドルウェアフレームワーク
それを行う方法は非常に簡単です( そして実際にはコードは本当に短い! )。 var connect = require('connect'); var app = connect();
を呼び出すとすぐに、次のことができる関数app
を取得します。
.use
( source )があります( ここから来る のために この単純なコード行 )。1.のため、次のことができます。
var app = connect();
// Register with http
http.createServer(app)
.listen(3000);
2.と組み合わせると、次の結果が得られます。
var connect = require('connect');
// Create a connect dispatcher
var app = connect()
// register a middleware
.use(function (req, res, next) { next(); });
// Register with http
http.createServer(app)
.listen(3000);
Connectには、http
に自分自身を登録するユーティリティ関数が用意されているため、http.createServer(app)
を呼び出す必要はありません。それはlisten
と呼ばれ、コードは単純に新しいhttpサーバーを作成し、コールバックとしてレジスタの接続を登録し、http.listen
に引数を転送します。 ソースから
app.listen = function(){
var server = http.createServer(this);
return server.listen.apply(server, arguments);
};
そのため、次のことができます。
var connect = require('connect');
// Create a connect dispatcher and register with http
var app = connect()
.listen(3000);
console.log('server running on port 3000');
プラグインフレームワークを上に置いた、古き良きhttp.createServer
です。
ExpressJSとconnectは並列プロジェクトです。 Connectは just ミドルウェアフレームワークであり、Nice use
関数を備えています。 ExpressはConnect に依存しません( package.jsonを参照 )。ただし、接続するすべてのことは行われます:
createServer
に登録することもできます。これは、req
/res
ペア( source )をとることができる単なる関数であるためです。listen
関数から それ自体をhttpで登録Connectが提供するもの(重複を表す)に加えて、多くの機能があります。例えば.
ExpressJS and connectのuse
関数は互換性があるため、ミドルウェアはshared です。どちらもミドルウェアフレームワークであり、Expressは単なるミドルウェアフレームワーク以上のものを備えています。
私の意見:あなたはあなた自身の選択をするのに十分な情報を得ています。
http.createServer
を使用します。http.createServer
の上にニースの抽象化があるため、connectを使用します。ほとんどの人はExpressJSを使用するだけです。
これらはある時点では真実だったかもしれませんが、今は間違っています:
http.Serverの拡張バージョンを継承する
違う。それは拡張しませんし、あなたが見たように... それを使用します
ExpressはConnectがhttpモジュールに行うことを接続します
Express 4.0は接続にも依存しません。 現在のpackage.jsonの依存関係セクションを参照
Node.jsはサーバーサイド用のJavaScriptモーターです。
すべてのjs機能に加えて、ネットワーク機能(HTTPなど)、およびファイルシステムへのアクセスも含まれます。
これは、ネットワーキングタスクがブラウザによって独占され、セキュリティ上の理由からファイルシステムへのアクセスが禁止されているクライアントサイドのjsとは異なります。
サーバー内で動作し、HTTPを理解し、ファイルにアクセスできるものはWebサーバーのように聞こえます。しかしそれは一つではありません。
node.jsをWebサーバーのように動作させるには、それをプログラムする必要があります。着信HTTP要求を処理し、適切な応答を提供します。
これがExpressがすることです。それはjsでのWebサーバーの実装です。
したがって、Webサイトを実装することは、Expressルートを構成し、そのサイトの特定の機能をプログラミングすることに似ています。
ページを提供することは多くのタスクを含みます。これらのタスクの多くはよく知られていて非常に一般的なので、ノードの Connect モジュール(nodeの下で実行できる多数のモジュールのうちの1つ)はそれらのタスクを実装します。
現在の素晴らしい製品をご覧ください。
Connectはフレームワークであり、それを通してあなたは必要な(サブ)モジュールを選ぶことができます。
Contrib Middleware ページには、追加のミドルウェアの長いリストが列挙されています。
Express自体には、最も一般的なConnectミドルウェアが付属しています。
Node.jsをインストールしてください。
Nodeにはnpm、ノードパッケージマネージャが付いています。
コマンドnpm install -g express
は、expressをグローバルにダウンロードおよびインストールします( express guide を確認してください)。
(nodeではなく)コマンドラインでexpress foo
を実行すると、すぐに実行できるfooという名前のアプリケーションが作成されます。その(新しく作成された)ディレクトリに移動し、コマンドnode <appname>
を使ってnodeでそれを実行し、そしてhttp://localhost:3000
を開いてを見てください。今あなたは中にいます。
Connectは、セッション管理、認証、ロギングなどの一般的なHTTPサーバー機能のための「高レベル」APIを提供します。 ExpressはConnectの上に高度な(Sinatraのような)機能を持っています。
Node.js
自体がHTTPモジュールを提供し、そのcreateServerメソッドはHTTPリクエストに応答するために使用できるオブジェクトを返します。そのオブジェクトはhttp.Server
プロトタイプを継承しています。