2014-10-29 14 views
6

Ho cercato di creare un sito semplice con Node.js, Express.js e MongoDB. Sono nuovo di queste tecnologie e stanno avendo problemi configurare il database Ecco frammento di codice nel mio file index.js:L'oggetto n. <MongoClient> non ha alcun metodo 'aperto'

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

var app = express(); 
app.set('port', process.env.PORT || 3000); 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'jade'); 

var mongoHost = 'localHost'; 
var mongoPort = 27017; 
var collectionDriver; 

var mongoClient = new MongoClient(new Server(mongoHost, mongoPort)); 
mongoClient.open(function(err, mongoClient) { 
    if (!mongoClient) { 
     console.error("Error! Exiting... Must start MongoDB first"); 
     process.exit(1); 
    } 
    var db = mongoClient.db("MyDatabase"); 
    collectionDriver = new CollectionDriver(db); 
}); 

Dopo provo a fare funzionare node index.js nel terminale, si dice quanto segue:

js-bson: Failed to load c++ bson extension, using pure JS version 

/Users/username/dev/ga-final/index.js:31 
mongoClient.open(function(err, mongoClient) { //C 
      ^
TypeError: Object #<MongoClient> has no method 'open' 
at Object.<anonymous> (/Users/username/dev/ga-final/index.js:31:13) 
at Module._compile (module.js:456:26) 
at Object.Module._extensions..js (module.js:474:10) 
at Module.load (module.js:356:32) 
at Function.Module._load (module.js:312:12) 
at Function.Module.runMain (module.js:497:10) 
at startup (node.js:119:16) 
at node.js:906:3 

Cosa c'è che non va? Perché non posso chiamare aperto? Puoi aiutarmi a risolvere questo? Grazie!

+0

ping verifica la mia risposta :) – squiroid

risposta

13

Questo sta accadendo può essere dovuto al fatto che si sta utilizzando nuova versione di MongoDB si sta lavorando bene dopo che uso MongoDB versione del driver 1.4.

npm install [email protected] 
+1

Questo ha funzionato come un incantesimo ... grazie @squiroid –

+0

Felice di aggiornarti @SarasArya :) – squiroid

+1

@practicemakesperfect Se questo ha funzionato per te, considera di contrassegnarlo come risposta. – chridam

5

Dai uno sguardo allo mongodb docs. L'oggetto mongoClient non è quello che pensi sia, e questo perché non è disponibile un metodo open().

rendere il codice esempio più simile a loro:

var MongoClient = require('mongodb').MongoClient 
    , assert = require('assert'); 

// Connection URL 
var url = 'mongodb://localhost:27017/myproject'; 
// Use connect method to connect to the Server 
MongoClient.connect(url, function(err, db) { 
    assert.equal(null, err); 
    console.log("Connected correctly to server"); 

    db.close(); 
}); 
+0

E la compatibilità con le versioni precedenti? – Christophe

+1

Penso che questo fosse il problema. Il post originale utilizzava la versione precedente della libreria che supportava '.open()' mentre la versione più recente utilizzava '.connect'. Gli autori di lib non lo hanno mantenuto retrocompatibile. – clay

Problemi correlati