Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js和Mongodb-TypeError:undefined不是函数_Mongodb - Fatal编程技术网

Node.js和Mongodb-TypeError:undefined不是函数

Node.js和Mongodb-TypeError:undefined不是函数,mongodb,Mongodb,我的朋友和我正在尝试用Node.js和MongoDB创建一个基本的webapp,我们在尝试连接到数据库时遇到了一个问题。我们收到的错误如下: C:\Users\James Kienle\Dropbox\Apps\Azure\Hanky Ranky\server.js:24 open(函数(err,mongoClient){//C ^ TypeError:undefined不是函数 在对象上。(C:\Users\James Kienle\Dropbox\Apps\Azure\Hanky Ranky

我的朋友和我正在尝试用Node.js和MongoDB创建一个基本的webapp,我们在尝试连接到数据库时遇到了一个问题。我们收到的错误如下:

C:\Users\James Kienle\Dropbox\Apps\Azure\Hanky Ranky\server.js:24 open(函数(err,mongoClient){//C ^ TypeError:undefined不是函数 在对象上。(C:\Users\James Kienle\Dropbox\Apps\Azure\Hanky Ranky\server.js:24:13) 在模块处编译(Module.js:460:26) 在Object.Module.\u extensions..js(Module.js:478:10) 在Module.load(Module.js:355:32) 在Function.Module.\u加载(Module.js:310:12) 位于Function.Module.runMain(Module.js:501:10) 启动时(node.js:129:16) 在node.js:814:3

这是server.js,我们的主文件

// Bring in required references
var http = require('http'),
    express = require('express'),
    path = require('path'),
    MongoClient = require('mongodb').MongoClient,
    Server = require('mongodb').Server,
    CollectionDriver = require('./collectionDriver').CollectionDriver;

// Set the default port for the app
var port = process.env.PORT || 1337;

// Create the new express app and set all required variables such as port and static html path
var app = express();
app.set('port', port); 
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

// Connect to MongoDB
var mongoHost = 'ds040898.mongolab.com'; //A
var mongoPort = 40898; 
var collectionDriver;

var mongoClient = new MongoClient(new Server(mongoHost, mongoPort)); //B
mongoClient.open(function(err, mongoClient) { //C
  if (!mongoClient) {
      console.error("Error! Exiting... Must start MongoDB first");
      process.exit(1); //D
  }
  var db = mongoClient.db("MongoLab-0");  //E
  db.authenticate('testuser', 'testpassword', function(err, result) {
    collectionDriver = new CollectionDriver(db); //F
  });
});

// Set up the expressjs public path
app.use(express.static(path.join(__dirname, 'public')));

// BRING IN THE DATA
app.get('/:collection', function(req, res) { //A
   var params = req.params; //B
   collectionDriver.findAll(req.params.collection, function(error, objs) { //C
          if (error) { res.send(400, error); } //D
          else { 
              if (req.accepts('html')) { //E
                  res.render('data',{objects: objs, collection: req.params.collection}); //F
              } else {
              res.set('Content-Type','application/json'); //G
                  res.send(200, objs); //H
              }
         }
    });
});

app.get('/:collection/:entity', function(req, res) { //I
   var params = req.params;
   var entity = params.entity;
   var collection = params.collection;
   if (entity) {
       collectionDriver.get(collection, entity, function(error, objs) { //J
          if (error) { res.send(400, error); }
          else { res.send(200, objs); } //K
       });
   } else {
      res.send(400, {error: 'bad url', url: req.url});
   }
});

// Pull the template for a 404 page
app.use(function (req,res) {
    res.render('404', {url:req.url}); 
});

// Create the node server
http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});
这是CollectionDriver.js

// Import the required MongoDB Packages
var ObjectID = require('mongodb').ObjectID;

// Define the CollectionDriver constructor method for later use
CollectionDriver = function(db) {
  this.db = db;
};

// Fetch a collection by name
CollectionDriver.prototype.getCollection = function(collectionName, callback) {
  this.db.collection(collectionName, function(error, the_collection) {
    if( error ) callback(error);
    else callback(null, the_collection);
  });
};

// Return all found objects
CollectionDriver.prototype.findAll = function(collectionName, callback) {
    this.getCollection(collectionName, function(error, the_collection) { //A
      if( error ) callback(error);
      else {
        the_collection.find().toArray(function(error, results) { //B
          if( error ) callback(error);
          else callback(null, results);
        });
      }
    });
};

// Obtain and display a single item vie _id
CollectionDriver.prototype.get = function(collectionName, id, callback) { //A
    this.getCollection(collectionName, function(error, the_collection) {
        if (error) callback(error);
        else {
            var checkForHexRegExp = new RegExp("^[0-9a-fA-F]{24}$"); //B
            if (!checkForHexRegExp.test(id)) callback({error: "invalid id"});
            else the_collection.findOne({'_id':ObjectID(id)}, function(error,doc) { //C
                if (error) callback(error);
                else callback(null, doc);
            });
        }
    });
};

exports.CollectionDriver = CollectionDriver;
这是我们的package.json文件。据我所知,该文件中列出的所有依赖项都已正确安装

{
  "name": "hanky-ranky",
  "version": "1.0.0",
  "private": true,
  "dependencies": {
    "express": "4.13.3",
    "jade": "1.11.0",
    "mongodb":"2.0.42"
  }
}
如果有帮助的话,我将尝试遵循本网站的教程:


谢谢大家!非常感谢大家的帮助!

本教程中使用的mongodb版本是1.3.23。您的mongodb版本是2.0.42。看起来实现已经更改

以下是在2.0版本中连接mongodb的方式:

var MongoClient = require('mongodb').MongoClient;
// Connection url
var url = 'mongodb://localhost:27017/test';
// Connect using MongoClient
MongoClient.connect(url, function(err, db) {
   // Use the admin database for the operation
   var adminDb = db.admin();
   // List all the available databases
   adminDb.listDatabases(function(err, dbs) {

   });
});
您必须稍微更改代码才能使用新版本,或者必须安装mongodb 1.3.23


您可以在以下位置获得更多详细信息:

server.js:24
那一行是什么?第24行的内容如下:
mongoClient.open(function(err,mongoClient){
检查您的MongoDb url格式..通常是这样的。
MongoDb://:@ds040898.mongolab.com:47602/
看起来修复了它!谢谢!