2016-12-06 6 views
-1

Ich führe einen node.js Server, und wenn ich zu /foo/bar navigieren gibt es router.get(), aber warum gibt es auch die mongodb.MongoClient.connect()?Über Funktion aufrufen in node.js

Wo wurde es aufgerufen?

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

Wenn Sie zu '/ foo/bar' navigieren, wird die Callback-Funktion' function (req, res) ... 'aufgerufen. Es ist also normal, dass 'connect' heißt – ThomasThiebaud

+0

Ist das ein normales Verhalten von' connect'? oder ruft ein Callback immer Funktionsdefinitionen im Inneren auf? @ThomasThiebaud – shinzou

+0

Wenn ein Callback ausgeführt wird, ruft es die Funktionen innerhalb von – ThomasThiebaud

Antwort

1

Ich betreibe einen node.js Server, und wenn ich zu/foo navigieren/Bar betritt es router.get()

Eigentlich nein, es router.get auf Start tritt, bevor Sie navigieren /foo/bar, und zwar nur einmal.

aber warum tritt es auch in den mongodb.MongoClient.connect() ein?

Da, dass der Zweck router.get ist: zu sagen Express (die Bibliothek für diese verwendet wird), dass, wenn es eine Anforderung ist für /foo/bar, soll es den angegebenen Rückruf laufen. Wenn Sie also zu /foo/bar navigieren, ruft Express den Rückruf auf und der Rückrufcode ruft mongodb.MongoClient.connect auf. Dies geschieht immer dann, wenn eine Anfrage an den Server lautet: /foo/bar.

+0

Also, wenn es mehrere 'router.get()' mit verschiedenen Pfaden gibt, werden alle von ihnen beim Start aufgerufen? – shinzou

+0

@kuhaku: Alle von ihnen werden * beim Start * genannt (vorausgesetzt, es gibt keine Verzweigungslogik im Skript, die sie aufruft), aber ihre * Callbacks * werden erst aufgerufen, wenn eine Anfrage mit einem passenden Pfad an die Server. –