2016-04-28 8 views
1

私たちは、このような別のファイルに複数のルートパスを整理することができ、新たな特急4ルータを使用して知っている:express.Router()とmultiple express()オブジェクトの違いは?

// In cars.js 
const router = express.Router(); 
router.get('/brands', function(req, res) { ... }); 
router.get('/models', function(req, res) { ... }); 
module.exports = router; 

// In animals.js 
const routerTwo = express.Router(); 
routerTwo.get('/domestic', function(req, res) { ... }); 
routerTwo.get('/wild', function(req, res) { ... }); 
module.exports = routerTwo; 

// In main.js 
app.use('/cars', router); // matches `/cars/brands`, `/cars/models`. 
app.use('/animals', routerTwo); // matches `animals/domestic`, `animals/wild`. 

今、私は両方cars.jsanimals.jsファイルに単にexpress()express.Router()を変更するかどうかを知りたい、それ両方ともmini-appと呼ばれるexpress()の新しいインスタンスとして機能するため、動作します。次に、新しいexpress.Router()オブジェクトの使用は何ですか?

express.Router()オブジェクトに公開されている同じメソッドではなく、その機能はモジュラルータハンドラなどの複数のexpress()インスタンスで実現できますか?

答えて

0

ルータは、簡単な表現では、Expressアプリケーションの軽量バージョン、またはas Express docs put it、ミニエクスプレスアプリケーションです。

グローバルエクスプレスオブジェクトは、ルータは基本的に.use.get.param、およびrouteなどのルーティングAPIを提供しながら、景色や各種設定をサポートするために、より多くのリソースが付属しています。ルーターオブジェクトは、ミドルウェアとルートの分離されたインスタンスを表し、ミドルウェアとルーティング機能のみを実行できるため、ルート処理を効率的にモジュール化するのに最適です。

は、今私は、私は単にexpress()両方cars.jsとanimals.jsファイル内でexpress.Router()を変更するかどうかを知りたい、それがうまくいくために、我々はミニアプリと呼ばれる特急の新しいインスタンス()のように、両方の行為。次に、新しいexpress.Router()オブジェクトの使用は何ですか?

さて、あなたはまだ孤立したルーティング目的でexpress()の代わりexpress.Router()を使用することができるはずですが、それをあなたはまた、あなたが、おそらくそれは、不要なオーバーヘッドだ使用することはありませんあまり余分なコードをもたらしています。

これは、express.Router()が作成された理由です。追加アプリケーションを作成するオーバーヘッドなしでルートモジュール化を提供するためです。

+0

同じプロジェクトの 'require( 'express')'が(nodejs docからキャッシュされて)何度呼び出されても問題ないので、不要なオーバーヘッドは無効であると思います。 –

+0

キャッシュは、アプリケーションの作成を一度行うので、それ以上の要求はすべて速くなりますが、キャッシュされたアプリにはまだルーティングのためだけに必要ではない余分なコードがたくさんあるという事実は変わりません。 – nem035

関連する問題