2016-12-06 4 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, и делает это только один раз.

но почему он также входит в mongodb.MongoClient.connect()?

Потому что цель router.get: Рассказывать Express (библиотека используется для этого), что, когда есть запрос /foo/bar, он должен выполнить данную функцию обратного вызова. Поэтому, когда вы переходите к /foo/bar, Express вызывает обратный вызов, а код обратного вызова вызывает mongodb.MongoClient.connect. Это происходит неоднократно, каждый раз на сервере запрашивается /foo/bar.

+0

Итак, если существует несколько 'router.get()' с разными путями, все они вызывается при запуске? – shinzou

+0

@kuhaku: все они * вызывают * при запуске (при условии, что в вызываемом скрипте нет логики ветвления), но опять же, их * обратные вызовы * не вызывается до тех пор, пока не будет выполнен запрос с соответствующим путем сервер. –

 Смежные вопросы

  • Нет связанных вопросов^_^