当前位置 : 主页 > 网页制作 > Nodejs >

node.js – Mongodb错误:无法连接到[localhost:27017]

来源:互联网 收集:自由互联 发布时间:2021-06-16
我有以下代码: 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 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.
这里有一些活动部分:

> 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,但是,它取决于您的操作系统,您需要如何配置它.

网友评论