28

Express バイナリを使用してサンプルの Express アプリケーションを作成すると、ブートストラップ コードに次の行が含まれます。

...

var app = express();
...
app.use(app.router);

app.router についてはあまり見つかりませんでした。これはルーティング (app.get()、app.post() など) ルールを処理するミドルウェアだと思っていましたが、これらのルールも app.use(app.router); を削除すると実行されます。ライン。

では、このミドルウェアの正確な目的は何でしょうか?

4

4 に答える 4

38

Express 3.x では、 app.router はconnect ミドルウェア ルーターの拡張バージョンです。ヘクターが言ったように、これは Express が 、 などに登録されたリクエストハンドラーを処理する場所app.getですapp.post

明示的に呼び出さない場合、express は、などapp.use(app.router)を初めて使用するときに暗黙的に呼び出します。ただし、すべてのミドルウェアの順序を選択するため、明示的に呼び出したい場合があります。app.get(...)app.post(...).use

app.use(express.favicon());
app.use(express.bodyParser());
app.use(express.methodOverride());
// app.get, app.post, etc called before static folder
app.use(app.router); 
app.use(express.static(path.join(__dirname, 'public')));

Express 3 のソースでルーターを取得する方法については、こちら を参照してください

Express 4 は app.router を必要としないことに注意してください。

于 2013-07-11T22:36:45.720 に答える
17

これは Express 2.x ガイドからのものですhttp://expressjs.com/2x/guide.html

「(オプションで)アプリケーションルートをマウントするために使用できるapp.routerの使用に注意してください。そうしないと、app.get()、app.post()などへの最初の呼び出しでルートがマウントされます。」

これは Express 3.x にも当てはまると思います。

于 2012-11-06T16:29:54.930 に答える