MongoDB错误:连接到[localhost:27017]失败。

3

我有以下代码:

var express = require('express'),
    mongoose = require('mongoose');


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

var Book = require('./models/bookModel');

var app = express();

var port = process.env.PORT || 3002;


var bookRouter = express.Router();

bookRouter.route('/Books')
    .get(function(req,res){

        Book.find(function(err,books){
            if(err)
                console.log(err);
            else
                res.json(books);
        });
    });


app.use('/api', bookRouter);



app.get('/', function(req, res){
    res.send('welcome to my API!');
});

app.listen(port, function(){
    console.log('Gulp is running my app on  PORT: ' + port);
});

Bookmodel.js文件:

var mongoose = require('mongoose'),
    Schema = mongoose.Schema;

var bookModel = new Schema({
    title: {
        type: String
    },
    author: {type: String},
    genre: {type: String},
    read: {type: Boolean, default:false}
});

module.exports= mongoose.model('Book', bookModel);

我的gulpfile内容如下:

var gulp = require('gulp'),
    nodemon = require('gulp-nodemon');


gulp.task('default', function(){
    nodemon({
        script: 'app.js',
        ext: 'js',
        env: {
            PORT:8000
        },
        ignore: ['./node_modules/**']
    })
    .on('restart', function(){
        console.log('Restarting');
    });
});

然而,我一直遇到这个错误:
Gulp is running my app on  PORT: 8000
events.js:85
      throw er; // Unhandled 'error' event
            ^
Error: failed to connect to [localhost:27017]
  at null.<anonymous> (/Users/admin/Documents/NodeAndExpress/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/server.js:549:74)

这非常令人沮丧,因为我正在密切跟进Pluralsight课程。我已经安装了所有必要的npm包等等。如果删除连接行,它肯定是mongoose连接引起错误。数据库还没有被创建,但讲师提到如果不存在,应该会自动创建。

我尝试了使用mongod手动启动mongoose连接,但是我收到了错误:

 ERROR: dbpath (/data/db) does not exist.
 Create this directory or give existing directory in --dbpath.

"./models/bookModel.js"是什么样子的?因为我偶尔会遇到问题,除非您只需要一次require mongoose,否则mongoose的连接会发生太晚的情况。 - Christian Grabowski
这里的主要问题是您的MongoDB服务器无法启动。它还给出了一个潜在的解决方案。作为快速修复,您可以尝试这样做:mkdir /tmp/data; mongod --dbpath /tmp/data - robertklep
@robertklep 您太厉害了。已经生效了。请创建一个官方答案。另外,请尝试解释为什么这个解决方案是必要的以及可能的“清洁修复”。我不知道为什么在PS上跳过了这一步。 - Tony54
2个回答

6
这里有几个关键点:
  • Mongoose,提供MongoDB对象建模;
  • MongoDB本身,是存储使用Mongoose创建的文档的数据库(服务器)。
安装方面,两者独立:当您安装Mongoose时,并不会自动安装MongoDB(反之亦然)。同样,当您运行使用Mongoose的Node.js脚本时,它不会自动启动MongoDB,这需要单独完成。
在您的情况下,MongoDB没有运行,因此Mongoose无法连接到它。 Mongoose只能抱怨(“连接失败…”)。
要启动MongoDB,可以使用命令行程序mongod。 通常您需要为其提供一个目录,用于存储其数据库; 在我的系统(Mac OS X)上,该目录为/var/db/mongodb,但这不一定是最佳位置(它取决于您正在运行哪个操作系统)。
作为一个快速修复方法,您可以提供一个临时目录来充当数据库目录:
$ mkdir /tmp/data
$ mongod --dbpath /tmp/data

这并不是实际应用的理想情况,因为在系统启动时通常会清空/tmp目录,所以您的数据库也会被删除。但是,对于测试目的而言,这是可以接受的。只要您知道在重新启动后,数据库将再次为空。

在某个时刻,您希望系统能够在系统启动时自动启动MongoDB,但具体需要如何配置取决于您的操作系统。


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接