2014-10-29 2 views
6

Próbuję utworzyć prostą witrynę za pomocą Node.js, Express.js i MongoDB. Jestem nowy w tych technologiach i zostały mające problem skonfigurować bazę danych Oto fragment kodu w moim index.js pliku:Obiekt nr <MongoClient> nie ma metody "otwarta"

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); 
}); 

Po próbie uruchomienia node index.js w terminalu, to mówi, co następuje:

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 

Co jest nie tak? Dlaczego nie mogę otworzyć połączenia? Czy możesz mi pomóc to naprawić? dzięki!

+0

ping sprawdź moją odpowiedź :) – squiroid

Odpowiedz

13

Dzieje się tak być może dlatego, że używasz nowej wersji MongoDB to działa poprawnie po Używam MongoDB sterownika w wersji 1.4.

npm install [email protected] 
+1

To działało jak wdzięk ... dzięki @squiroid –

+0

Cieszę się, że mogę Ci pomóc @SarasArya :) – squiroid

+1

@practicemakesperfect Jeśli to zadziałało dla Ciebie, pomyśl o oznaczeniu go jako odpowiedzi. – chridam

5

Spójrz na mongodb docs. Twój obiekt mongoClient nie jest taki, jak myślisz, i dlatego nie jest dostępna metoda open().

Dodać Przykładowy kod wygląda bardziej jak oni:

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

Co ze zgodnością wsteczną? – Christophe

+1

Myślę, że to był problem. Oryginalny post korzystał ze starszej wersji biblioteki obsługującej '.open()', podczas gdy nowsza wersja używała '.connect' zamiast. Autorzy bibliotek nie zachowali zgodności wstecznej. – clay