NodeJS 无法使用mongoose连接到mongoDB

c9x0cxw0  于 2023-03-12  发布在  Node.js
关注(0)|答案(5)|浏览(218)

我正在阅读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.jsmongodbmongoose等还很陌生,所以我可能会错过一些基本概念。

d8tt03nd

d8tt03nd1#

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

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

教程中的示例如下:

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

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

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

现在我得到回应了!

lndjwyie

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默认连接对象从未连接

jgzswidk

jgzswidk3#

这就是我的交流方式

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'

我能和你交流。

tag5nh1u

tag5nh1u4#

您可以尝试编写127.0.0.1而不是localhost。这已经解决了我的问题。
代替

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

试试这个:

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

w8f9ii695#

这是你最好的错误mongoose.connect('mongodb://本地主机:{端口}/库数据库');
因此,请给予本地主机完整部分,如mongoos.connect(“mongodb:127.0.0.1:{port}/library_database”);

相关问题