JavaScriptをよく知っているにもかかわらず、Node.jsエコシステムのこれら3つのプロジェクトが正確に何をしているのか混乱しています。Rails 'Rackのようなものですか?誰か説明していただけますか?
JavaScriptをよく知っているにもかかわらず、Node.jsエコシステムのこれら3つのプロジェクトが正確に何をしているのか混乱しています。Rails 'Rackのようなものですか?誰か説明していただけますか?
回答:
[ 更新: 4.0リリース以降、ExpressはConnectを使用しなくなりました。ただし、Expressは引き続きConnect用に作成されたミドルウェアと互換性があります。私の元の答えは以下です。]
Node.jsを見る人にとって、これは間違いなく混乱の共通点であるため、これについて質問してくれてうれしいです。これは、それを説明する上で私の最高のショットです:
Node.js自体がHTTPモジュールを提供し、そのcreateServer
メソッドはHTTPリクエストへの応答に使用できるオブジェクトを返します。そのオブジェクトはhttp.Server
プロトタイプを継承します。
Connectには、createServer
の拡張バージョンを継承するオブジェクトを返すメソッドも用意されていますhttp.Server
。Connectの拡張機能は、主にミドルウェアのプラグインを容易にするために用意されています。そのため、Connectはそれ自体を「ミドルウェアフレームワーク」と表現し、しばしばRubyのラックに類似しています。
Expressは、Connectがhttpモジュールに対して行うことをConnectに対して実行しcreateServer
ます。ConnectのServer
プロトタイプを拡張するメソッドを提供します。したがって、Connectのすべての機能に加えて、ビューのレンダリングとルートを説明するための便利なDSLがあります。Rubyのシナトラは良い例えです。
次に、さらに進んでExpressを拡張する他のフレームワークがあります。たとえばZappaは、CoffeeScript、サーバーサイドjQuery、およびテストのサポートを統合します。
「ミドルウェア」が何を意味するかについての具体的な例を以下に示します。そのままでは、上記のどれも静的ファイルを提供しません。しかし、connect.static
(Connectに付属するミドルウェア)を投入し、ディレクトリーを指すように構成すれば、サーバーはそのディレクトリー内のファイルへのアクセスを提供します。ExpressはConnectのミドルウェアも提供することに注意してください。express.static
と同じconnect.static
です。(どちらもstaticProvider
最近まで知られていました。)
私の印象では、ほとんどの「実際の」Node.jsアプリは最近Expressで開発されているようです。追加された機能は非常に便利で、必要に応じて下位レベルの機能はすべてそのまま残っています。
受け入れられた答えは本当に古い(そして今は間違っている)。Connect(3.0)/ Express(4.0)の現在のバージョンに基づく情報(ソース付き)を以下に示します。
http / https createServer
は単にコールバック(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
(ソース)があります(これは、この単純なコード行のために、ここから来ています)。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と接続は並列プロジェクトです。接続があるだけで素敵で、ミドルウェアフレームワークuse
機能。ExpressはConnectに依存しません(package.jsonを参照))。ただし、接続するすべてのことを行います。
createServer
取ることができる単なる関数であるため、同様の接続で登録できます。req
res
)を。listen
に登録するユーティリティ関数connectが提供するもの(重複を表す)に加えて、connectにはさらに多くの機能があります。例えば
use
ExpressJS と connect の機能は互換性があるため、ミドルウェアは共有されます。どちらもミドルウェアフレームワークであり、Expressには単純なミドルウェアフレームワーク以上のものがあります。
私の意見:あなたは自分の選択をするために十分に^上記に基づいて^通知されます。
http.createServer
最初からconnect / expressjsのようなものを作成する場合に使用します。http.createServer
ほとんどの人はExpressJSを使うべきです。
これらはある時点では真実だったかもしれませんが、今は間違っています:
http.Serverの拡張バージョンを継承する
違う。それはそれを拡張せず、あなたが見たように... それを使用します
Expressは、Connectがhttpモジュールに対して行うことを接続します。
Express 4.0は接続に依存していません。現在のpackage.jsonの依存関係セクションを参照してください
Node.jsはサーバー側のJavaScriptモーターです。
すべてのjs機能に加えて、ネットワーク機能(HTTPなど)とファイルシステムへのアクセスが含まれます。
これは、ネットワークタスクがブラウザによって独占され、セキュリティ上の理由からファイルシステムへのアクセスが禁止されているクライアント側のjsとは異なります。
サーバーで実行され、HTTPを理解し、ファイルにアクセスできるものは、Webサーバーのように聞こえます。しかし、それは1つではありません。
node.jsをWebサーバーのように動作させるには、それをプログラムする必要があります。つまり、着信HTTP要求を処理し、適切な応答を提供します。
これがExpressの機能です。jsでのWebサーバーの実装です。
したがって、Webサイトの実装は、エクスプレスルートの構成、およびサイト固有の機能のプログラミングに似ています。
ページの配信には、いくつかのタスクが含まれます。これらのタスクの多くはよく知られており、非常に一般的であるため、ノードの接続モジュール(ノードの下で実行できる多数のモジュールの1つ)がこれらのタスクを実装します。
現在の印象的な製品をご覧ください:
接続はフレームワークであり、それを介して、必要な(サブ)モジュールを選択できます。Contribのミドルウェアのページには、追加の長いリスト列挙ミドルウェアを。
Express自体には、最も一般的なConnectミドルウェアが付属しています。
node.jsをインストールします。
ノードには、ノードパッケージマネージャーであるnpmが付属しています。
このコマンドnpm install -g express
は、Expressをグローバルにダウンロードしてインストールします(Express Guideを確認してください)。
実行express foo
コマンドラインで(ないノードには)名前fooすぐに実行するアプリケーションを作成します。(新しく作成された)ディレクトリに移動し、nodeを使用してコマンドを実行し、node <appname>
開いhttp://localhost:3000
て確認します。今あなたがいます。
Node.js
それ自体がHTTPモジュールを提供します。そのcreateServerメソッドは、HTTPリクエストへの応答に使用できるオブジェクトを返します。そのオブジェクトはhttp.Server
プロトタイプを継承します。
ミドルウェアは、その名前が示すとおり、実際にはミドルウェアは中間に位置しています。リクエストとレスポンスの中間です。 この画像のリクエスト、レスポンス、エクスプレスサーバーがエクスプレスアプリにどのように座っているかを確認すると、リクエストがクライアントから送信され、エクスプレスサーバーサーバーがそれらのリクエストを処理していることがわかります。実際にこれを分割できます。このように、エクスプレスサーバー全体のタスク全体を小さな個別のタスクに組み込みます。 特定のタスクを実行し、要求を次のタスクに渡すサーバーパーツの小さなチャンクのリクエストと応答の間にミドルウェアがどのように配置されるか。最終的にすべてのタスクを実行して応答が行われます。応答サイクル。
これは、ミドルウェア用のエクスプレスYouTubeビデオでミドルウェアを説明する良い例です