无法使用mongoose连接到mongoDB

时间:2014-11-30 11:27:57

标签: javascript node.js mongodb mongoose

我正在关注本书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"
    }
}

tutorial then suggests to将以下内容添加到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

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

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

我是否需要为应用程序手动创建数据库..?如果是这样,我如何为应用程序创建实例并从节点服务器连接到它??

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

我是node.jsmongodbmongoose等新手,所以我可能会遗漏一些基本概念。我错过了什么..?

4 个答案:

答案 0 :(得分:3)

我刚刚在文档中找到了connectcreateConnection的示例:

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

教程中的内容如下:

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

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

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

现在我收到了回复!

答案 1 :(得分:2)

您可能会从mongoose documentation

中发现这有用
  

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

     

var conn = mongoose.createConnection('你的连接字符串'),   MyModel = conn.model(' ModelName',schema),m = new MyModel;   m.save(); //作品vs

     

var conn = mongoose.createConnection('你的连接字符串'),   MyModel = mongoose.model(' ModelName',架构),m = new MyModel;   m.save(); //无效b / c默认连接对象永远不会   连接

答案 2 :(得分:0)

1)您无需显式创建数据库。如果数据库不存在,当第一个记录插入任何集合时,MongoDB将自动创建一个。

2)我认为你只需要在集合中插入一些书籍(通过mongo shell,或者在你的代码中引导它),你就应该成为A.你得到的空回答是因为在集合中还没有书籍,所以我猜你是否正在发送一个null:return response.send(books);

答案 3 :(得分:0)

这就是我的联系方式。

var mongoose = require('mongoose/');
var db = mongoose.connect('mongodb://localhost/newdbcoll');


//e.g. mongodb://username:server@mongoserver:10059/somecollection
//mongoose_auth: 'mongodb://admin:admin@127.0.0.1:27017/chrome-server'

我能够连接。