表示app nodejs和mongoose db / mongodb入门

我不能为我的生活得到mongoose在我的快速应用程序工作。 我已经安装mongoose,并通过NPM mongodb(mongoose文件没有说明是否需要单独的mongodb或如何启动和运行)。

这是我使用的代码。

var mongoose = require('mongoose'); mongoose.connect('mongodb://127.0.0.1/my_database'); var Schema = mongoose.Schema, ObjectId = Schema.ObjectId; var Comments = new Schema({ title : String , body : String , date : Date }); var BlogPost = new Schema({ author : ObjectId , title : String , body : String , date : Date , comments : [Comments] , meta : { votes : Number , favs : Number } }); var BlogPost = mongoose.model('BlogPost', BlogPost); var post = new BlogPost(); post.title='blahblah'; // create a comment post.comments.push({ title: 'My comment' }); post.save(function (err) { if(err){ throw err; console.log(err); }else{ console.log('saved!'); } }); 

任何人有任何想法我做错了什么? 我不明白是否需要以某种方式单独启动mongodb(它看起来像mongoose.connect函数启动mongodb服务器的权利?)

但是,当我开始我的应用程序时,没有任何事情发生(当我保存testing邮件时,它应该输出错误或保存到我的控制台?

反正任何帮助将非常感激!

谢谢

MongoDB是一个完全独立的服务,因此必须已经在运行nodejs来访问它。

您没有看到任何输出的原因是因为您的程序在您的文章完成之前就结束了,或者在这种情况下由于无法到达MongoDB而超时。

编辑

如果您仍然好奇为什么在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()开始一个新的asynchronous调用MongoDB并立即返回 ,应用程序将立即退出,因为没有别的办法。 (在后面,post.save()只是添加一个新的事件处理程序到事件循环,监视该呼叫完成。)

为了确保程序不会立即退出,我们添加了process.stdin.resume() ,它指示事件循环在每次通过时检查新input(从标准input),从而使程序永远运行。

基于Nodejs的networking服务器依靠相同的机制连续运行,监视来自networking套接字的input而不是标准input。

我不能强调事件循环概念对nodejs编程的重要性。 我估计有75%或更多的人得到nodejs来做他们需要的问题可以归因于不了解事件循环以及它如何影响nodejs编程模型!