我有以下代码:
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.
答案 0 :(得分:6)
这里有一些活动部分:
在安装方面,两者都是独立的:当你安装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或将配置选项更改为现有路径。