我正在阅读addyosmani - backbone-fundamentals这本书,用节点服务器和mongodb作为后端创建一个简单的backbone.js应用程序。
按照说明,我从nodejs.org安装了最新版本的Node.js,从www.mongodb.org安装了最新版本的mongodb,并按照instructions运行了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"
}
}
然后,本教程建议将以下内容添加到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' );
因为这本书没有提到任何关于创建名为library_database
的数据库的内容,我也没有手动创建-如果我在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);
});
它记录Running
..!(* 为什么会这样,因为我没有创建任何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
DB当前正在使用默认数据库“test”监听默认端口。
我在mongo shell中尝试了use library_database
,但仍然从节点服务器得到相同的响应。
我是否需要为应用程序手动创建一个数据库..?如果需要,我如何为应用程序创建一个示例并从节点服务器连接到它..?
或者mongoose会自动在应用程序根文件夹中创建这样的数据库(* 不太可能发生 *)..?
我对node.js
,mongodb
,mongoose
等还很陌生,所以我可能会错过一些基本概念。
5条答案
按热度按时间d8tt03nd1#
我刚刚在文档中找到了
connect
和createConnection
的示例:教程中的示例如下:
缺少端口号。我通过添加默认端口号进行了更改,如下所示:
现在我得到回应了!
lndjwyie2#
您可能会发现mongoose documentation中的此功能很有帮助
重要提示!如果您使用mongoose.createConnection()打开了一个单独的连接,但尝试通过mongoose.model('ModelName')访问模型,它将无法正常工作,因为它没有挂接到活动的数据库连接。在这种情况下,通过您创建的连接访问您的模型:
var conn = mongoose.createConnection('您的连接字符串'),MyModel = conn.model('模型名称',模式),m =新的MyModel;m.save(); //与
var conn = mongoose.createConnection(“您的连接字符串”),MyModel = mongoose.model(“模型名称”,模式),m =新的MyModel;m.save(); //不起作用B/c默认连接对象从未连接
jgzswidk3#
“这就是我的交流方式
我能和你交流。
tag5nh1u4#
您可以尝试编写127.0.0.1而不是localhost。这已经解决了我的问题。
代替
试试这个:
w8f9ii695#
这是你最好的错误mongoose.connect('mongodb://本地主机:{端口}/库数据库');
因此,请给予本地主机完整部分,如mongoos.connect(“mongodb:127.0.0.1:{port}/library_database”);