Mongodb错误:无法连接到[localhost:27017]

时间:2015-08-26 14:16:13

标签: node.js mongodb

我有以下代码:

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.

2 个答案:

答案 0 :(得分:6)

这里有一些活动部分:

  • Mongoose,为MongoDB提供对象建模;
  • MongoDB本身,它是存储您使用Mongoose创建的文档的数据库(-server)。

在安装方面,两者都是独立的:当你安装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 :(得分:1)

我希望您的mongodb安装因dbpath错误而出错。 dbpath是mongodb的配置参数:http://docs.mongodb.org/manual/reference/configuration-options/#storage.dbPath

因此,您可能尝试重新安装mongodb或将配置选项更改为现有路径。