MongoDB - это совершенно отдельный сервис, поэтому он уже должен быть запущен, чтобы nodejs мог получить к нему доступ.
Причина, по которой вы не видите никаких выходных данных, заключается в том, что ваша программа заканчивается до того, как завершается ваше сообщение, или в этом случае истекает время ожидания, потому что она не может достичь MongoDB.
EDIT
Если вам все еще интересно, почему вы не видите вывод, когда MongoDB не запущен, остановите MongoDB, измените ваше приложение так, чтобы оно включало:
// exit program in one minute with an error
// cancelled if we can successfully talk to MongoDB
var sentinel = setTimeout(function(){
throw "failed to connect to MongoDB after one minute!";
}, 60*1000); // 60 seconds
post.save(function (err) {
clearTimeout(sentinel); // cancel the timeout sentinel
if(err){
throw err;
console.log(err); // won't occur since the throw will end the program
}else{
console.log('saved!');
}
});
process.stdin.resume(); // read from stdin to keep program running
и запустите его снова.
Крайне важно понимать, что nodejs не похож на большинство сред программирования, поскольку он запускает вашу программу в цикле обработки событий, который выполняется только до тех пор, пока ему есть чем заняться. Если ничего не поделаешь, nodejs выйдет.
И так как ваш post.save () запускает новый асинхронный вызов MongoDB и немедленно возвращает , приложение немедленно завершает работу, так как ему больше нечего делать. (Под прикрытием post.save () просто добавляет новый обработчик событий в цикл событий, который следит за завершением вызова.)
Чтобы гарантировать, что ваша программа не выйдет немедленно, мы добавляем process.stdin.resume()
, который инструктирует цикл обработки событий проверять наличие нового ввода (из стандартного ввода) на каждом проходе, эффективно делая вашу программу вечной.
Сетевые серверы Nodejs полагаются на один и тот же механизм для непрерывной работы, следя за вводом данных через сетевой сокет вместо стандартного ввода.
Я не могу не подчеркнуть, насколько важна концепция цикла обработки событий для программирования в nodejs. Я бы оценил, что 75% или более проблем, о которых сообщают люди, заставляющие nodejs делать то, что им нужно, можно объяснить непониманием цикла событий и тем, как оно влияет на модель программирования nodejs!