Javascript 无法使用mongoose连接到mongoDB

Javascript 无法使用mongoose连接到mongoDB,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我遵循这本书,创建了一个简单的backbone.js应用程序,以节点服务器和mongodb作为后端 按照说明,我已经从安装了Node.js和mongodb的最新版本,并在之后运行了mongodb package.json如下所示: { "name": "backbone-library", "version": "0.0.1", "description": "A simple library application using Backbone", "

我遵循这本书,创建了一个简单的backbone.js应用程序,以节点服务器和mongodb作为后端

按照说明,我已经从安装了Node.js和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"
    }
}
mongoose.connect( 'mongodb://localhost/library_database' );
mongoose.createConnection('mongodb://localhost:27017/library_database');
将以下内容添加到
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\u 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);
});
它记录运行中的
。。!(为什么是因为我没有创建任何
库\数据库
。)

但是,如果我进一步按照本书添加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中尝试了
使用library\u database
,但仍然从节点服务器得到相同的响应

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

或者mongoose是否会在应用程序根文件夹中自动创建这样一个db(不太可能发生)

我对
node.js
mongodb
mongoose
等都很陌生,所以我可能缺少一些基本概念。我缺少什么?

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


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

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

mongoose.connect('mongodb://user:pass@localhost:port/database');
//-----------------------------------------------^
本教程中的内容如下:

    {
    "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"
    }
}
mongoose.connect( 'mongodb://localhost/library_database' );
mongoose.createConnection('mongodb://localhost:27017/library_database');
它缺少端口号。我通过添加默认端口号对其进行了更改,如下所示:

    {
    "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"
    }
}
mongoose.connect( 'mongodb://localhost/library_database' );
mongoose.createConnection('mongodb://localhost:27017/library_database');

现在我得到了回应

这就是我连接的方式。

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'

而且我可以连接。

您可能会从

重要!如果使用打开了单独的连接 但尝试通过以下方式访问模型: model('ModelName')由于它是 未连接到活动数据库连接。在这种情况下,访问您的 通过您创建的连接进行建模:

var conn=mongoose.createConnection(“您的连接字符串”), MyModel=conn.model('ModelName',schema),m=newmymodel; m、 save();//工作vs

var conn=mongoose.createConnection(“您的连接字符串”), MyModel=mongoose.model('ModelName',schema),m=newmymodel; m、 save();//b/c不起作用默认连接对象从未 连接的


这里,如果mongodb中不存在“newdbcoll”db,则会创建一个同名的新db,或者抛出一个错误?@RahulSharma它不会抛出任何类型或错误,当您将在集合中插入一个文档时,将创建db。嘿,我有一种情况,我正在使用集合处理用户数据。几天前,一切正常,并格式化了我的机器,所以数据库被删除了。现在,如果我尝试注册,因为有了新的DB,Mongodb findOne查询永远不会返回。任何帮助都将不胜感激。@Charlie,你是在使用mongoose ODM还是其他。。。。。您还可以指定您正在使用的版本吗?我认为这将有助于复制错误。@Varun:谢谢您的回复,我是node的新手,不清楚mongoose ODM是什么。my package.json有“mongodb”:“^2.2.35”和“mongoose”:“^4.13.12”。某些mongodb版本(如3.0+)需要端口号。添加端口号后,端口号正常工作。很好!