无法使用mongoose连接到mongoDB

我正在关注这本书addyosmani – backbone-fundamentals创build一个简单的backbone.js应用程序与节点服务器和mongodb作为后端。

按照指示,我已经安装了nodejs.org的最新版本的Node.js和www.mongodb.org的 mongodb,并按照说明运行了mongodb。


package.json如下所示:

  { "name": "backbone-library", "version": "0.0.1", "description": "A simple library application using Backbone", "dependencies": { "express": "~3.1.0", "path": "~0.4.9", "mongoose": "~3.5.5", "body-parser": "~1.9.1" } } 

然后, 教程build议将以下内容添加到server.js文件以连接到mongoDB:

 //Connect to database mongoose.connect( 'mongodb://localhost/library_database' ); //Schemas var Book = new mongoose.Schema({ title: String, author: String, releaseDate: Date }); //Models var BookModel = mongoose.model( 'Book', Book ); 

我对以下行感到困惑:

 mongoose.connect( 'mongodb://localhost/library_database' ); 

因为本书没有提到创build一个名为library_database的数据库的任何事情,我还没有手动创build – 仍然如果我在server.js运行以下内容:

 mongoose.createConnection( 'mongodb://localhost/library_database' ); var db = mongoose.connection; db.on('error', console.error.bind(console, 'connection error:')); // we wait till mongo is ready before letting the http handler query users: db.once('open', function () { console.log('Running'); //Schemas var Book = new mongoose.Schema({ title: String, author: String, releaseDate: Date }); //Models var BookModel = mongoose.model('Book', Book); }); 

它loggingRunning ..! ( 怎么来,因为我没有创build任何library_database ..?

但是,如果我通过添加一个GET请求处理程序进一步跟随本书,如下所示:

  //Get a list of all books app.get( '/api/books', function( request, response ) { return BookModel.find( function( err, books ) { if( !err ) { return response.send( books ); } else { return console.log( err ); } }); }); 

并按照以下要求进行打击:

 jQuery.get( '/api/books/', function( data, textStatus, jqXHR ) { console.log( 'Get response:' ); console.dir( data ); console.log( textStatus ); console.dir( jqXHR ); }); 

根据教程我应该看到日志,而是我得到以下错误:

 GET http://localhost:4711/api/books/ net::ERR_EMPTY_RESPONSE 

数据库当前正在使用默认数据库“test”来侦听默认端口。

我尝试在mongo shell中use library_database ,但仍然从节点服务器获得相同的响应。

我需要手动创build应用程序的数据库..? 如果是这样,我怎么能创build应用程序的实例,并从节点服务器连接到它?

或者mongoose会自动在应用程序根文件夹中创build这样一个数据库( 不太可能发生 )..?

我很新的node.jsmongodbmongoose等,所以我可能会缺less一些基本的概念。 我错过了什么?

我刚刚在文档中findconnectcreateConnection的示例:

 mongoose.connect('mongodb://user:pass@localhost:port/database'); //-----------------------------------------------^ 

在教程中的一个如下:

 mongoose.connect( 'mongodb://localhost/library_database' ); 

它缺less端口号。 我通过添加默认端口号来更改它,如下所示:

 mongoose.createConnection('mongodb://localhost:27017/library_database'); 

现在我正在得到回应!

你可能会发现从mongoose文档有用

重要! 如果您使用mongoose.createConnection()打开单独的连接,但是尝试通过mongoose.model('ModelName')访问模型,它将无法按预期工作,因为它没有连接到活动数据库连接。 在这种情况下,通过您创build的连接访问您的模型:

var conn = mongoose.createConnection('your connection string'),MyModel = conn.model('ModelName',schema),m = new MyModel; m.save(); //工作vs

var conn = mongoose.createConnection('your connection string'),MyModel = mongoose.model('ModelName',schema),m = new MyModel; m.save(); //不起作用b / c默认连接对象从未连接

1)您不需要显式创build数据库。 如果数据库不存在,当第一个logging被插入任何集合时,MongoDB会自动创build一个。

2)我想你只需要插入一些书籍(通过mongo shell,或在你的代码中引导它),你应该是A的远离。 你得到的空白答复是因为集合中没有任何书籍,所以我猜你是发送null:return response.send(books);

这是我如何连接。

 var mongoose = require('mongoose/'); var db = mongoose.connect('mongodb://localhost/newdbcoll'); //eg mongodb://username:server@mongoserver:10059/somecollection //mongoose_auth: 'mongodb://admin:admin@127.0.0.1:27017/chrome-server' 

而且我能够连接。