Node和Mongo db.open给定undefined不是一个函数

在本教程之后 ,运行我的server.js文件时出现以下错误

self.s.pool = new Pool(Object.^assign(self.s.options, options, {bson:this.s. TypeError: undefined is not a function " 

似乎是我的db.open()函数的问题。 但是,我不确定是否因为无法连接到数据库或其他东西。

我可以logging服务器和数据库对象,所以不知道未定义的错误来自哪里。 它不会loggingdb.open函数中包含的错误消息,所以有些事情在此之前似乎中断了。

任何帮助将是伟大的,下面是我的代码

server.js

 var express = require('express'), movies = require('./routes/movies.js'); var app = express(); app.configure(function(){ app.use(express.logger('dev')); app.use(express.bodyParser()); }); app.get('/movies',movies.findAll); app.get('/movies/:id',movies.findById); app.post('/movies', movies.addMovie); app.put('/movies/:id',movies.updateMovie); app.delete('/movies/:id',movies.deleteMovie); app.listen(3000); console.log('Listening on port 3000...'); 

路线/ movies.js

 var mongo = require('mongodb'); var Server = mongo.Server, Db = mongo.Db, BSON = mongo.BSONPure; var server = new Server('localhost', 27017, {auto_reconnect: true}); db = new Db('moviedb', server); db.open(function(err,db){ if(!err) { console.log('Connected to "moviesdb" database'); db.collection('movies',{strict:true},function(err,collection){ if(err) { console.log("The 'movies' collection doesn't exist. Creating it with sample data..."); populateDB(); } }); } }); exports.findAll = function(req,res){ db.collection('movies',function(err,collection){ collection.find().toArray(function(err,items){ res.send(items); }); }); } exports.findById = function(req,res){ var id = req.params.id; console.log('Retrieving movie: ' + id); db.collection('movies',function(err,collection){ collection.findOne({'_id':new BSON.ObjectID(id)}, function(err,item){ res.send(item); }); }); } exports.addMovie = function(req,res){ var movie = req.body; console.log('Adding movie: ' + JSON.stringify(movie)); db.collection('movies',function(err,collection){ collection.insert(movie,{'safe':true},function(err,result){ if(err) { res.send({'error':'An error has occurred'}); } else { console.log('Success:' + JSON.stringify(result[0])); res.send(result[0]); } }); }); } exports.updateMovie = function(req,res){ var id = req.params.id, movie = req.body; console.log('Updating movie: ' + id); console.log(JSON.stringify(movie)); db.collection('movies',function(err,collection){ collection.update({'_id':new BSON.ObjectID(id)},movie,{'safe':true},function(err,result){ if(err) { console.log('Error updating movie: ' + err); res.send({'error':'An error has occured'}); } else { console.log('' + result + ' document(s) updated'); res.send(movie); } }); }); } exports.deleteMovie = function(req,res){ var id = req.params.id; console.log('Deleting movie: ' + id); db.collection('movies',function(err,collection){ collection.remove({'_id':new BSON.ObjectID(id)}, {safe:true}, function(err, result) { if(err) { res.send({'error':'An error has occurred - ' + err}); } else { console.log('' + result + ' document(s) deleted'); res.send(req.body); } }); }); } /*--------------------------------------------------------------------------------------------------------------------*/ // Populate database with sample data -- Only used once: the first time the application is started. var populateDB = function() { var movies = [ { name: "Titanic", release: "2009", description: "description....", picture: "titanic-poster.jpg" }, { name: "Jaws", release: "2000", description: "description....", picture: "jaws-poster.jpg" }, { name: "Halloween", release: "1992", description: "description....", picture: "halloween-poster.jpg" } ]; db.collection('movies', function(err, collection) { collection.insert(movies, {safe:true}, function(err, result) {}); }); }