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