2016-12-06 7 views
-1

私はnode.jsサーバーを実行します。/foo/barに移動すると、router.get()と入力されますが、それはなぜmongodb.MongoClient.connect()にも入りますか?node.jsで呼び出される関数について

どこから呼び出されましたか?

var mongodb = require('mongodb'); 

router.get('/foo/bar', function (req, res) { 
    console.log("in router get"); 

    mongodb.MongoClient.connect(uri, function(error, db) { 
      console.log("in mongo db"); 

    }); 
}); 
+1

'/ foo/bar'に移動すると、コールバック関数' function(req、res)... 'が呼び出されます。したがって、通常は 'connect'が呼び出されます – ThomasThiebaud

+0

これは' connect'の通常の動作ですか?コールバックは常に関数定義を呼び出しますか? @ThomasThiebaud – shinzou

+0

コールバックが実行されると、内部で関数が呼び出されます – ThomasThiebaud

答えて

1

私はNode.jsのサーバーを実行し、あなたがに移動する前に、私はに/ fooの/バーを移動するとき、それはrouter.get()

に入る実際には、それは、router.getに起動に入ります/foo/barであり、これは1回だけである。

しかし、なぜそれもmongodb.MongoClient.connect()に入りますか?

それはrouter.getの目的だからです:/foo/barの要求があるとき、それは与えられたコールバックを実行する必要があることをエクスプレス(このために使用されているライブラリを)伝えること。したがって、/foo/barに移動すると、Expressはコールバックを呼び出し、コールバックのコードはmongodb.MongoClient.connectを呼び出します。これは、サーバーへの要求が/foo/barの場合はいつでも、繰り返し発生します。

+0

異なるパスを持つ 'router.get()'がいくつかある場合、それらはすべて起動時に呼び出されますか? – shinzou

+0

@kuhaku:起動時にすべて呼び出される*(それらを呼び出すスクリプトに分岐ロジックがない場合)*コールバック*は、一致するパスを持つ要求がサーバ。 –

関連する問題