2011-01-14 21 views
61

Jak połączyć się z mongodb z node.js?Jak połączyć się z mongodb z node.js (i uwierzytelnić)?

Mam sterownik macierzysty-węzeł-mongodb.

Istnieje najwyraźniej 0 dokumentacji.

Czy to coś takiego?

var mongo = require('mongodb/lib/mongodb'); 
var Db= new mongo.Db(dbname, new mongo.Server('mongolab.com', 27017, {}), {}); 

Gdzie umieścić nazwę użytkownika i hasło?

Również jak wstawić coś?

Dzięki.

+0

dobrych miejsc do rozpoczęcia http://christiankvalheim.com/ i https: // GitHub. com/christkv/node-mongodb-native Powiedział, że pracuję nad poprawnymi dokumentami, gdy mówimy o wydaniu v1 sterownika, który będzie pierwszą oficjalnie wspieraną wersją 10gen. – christkv

Odpowiedz

40

Per the source:

Po podłączeniu:

Db.authenticate(user, password, function(err, res) { 
    // callback 
}); 
+1

Występuje błąd "auth failed". –

+3

Nie mogę uwierzyć, że ta odpowiedź została tak mocno potraktowana błędami składni ... callback jest źle zdefiniowany. Zobacz moje rozwiązanie i bardziej odpowiedni link źródłowy poniżej: http://stackoverflow.com/a/15191273/1060487 – mattdlockyer

+0

Najpierw wypróbowałem to i nie zadziałało, ale to dlatego, że użyłem go źle. Używałem danych uwierzytelniających moich użytkowników w admin. Stworzyłem użytkownika specjalnie dla bazy danych i użyłem tych poświadczeń. Pracował jak urok. Dzięki! –

3

Polecam mongoskin po prostu stworzony.

var mongo = require('mongoskin'); 
var db = mongo.db('admin:[email protected]/mydb?auto_reconnnect'); 
db.collection('mycollection').find().toArray(function(err, items){ 
    // do something with items 
}); 

Czy synchronizacja mongoszkin? Nop, to jest asynchroniczne.

3

Ten pracował dla mnie:

Db.admin().authenticate(user, password, function() {}); 
2

Można to zrobić następująco

var db = require('mongo-lite').connect('mongodb://localhost/test') 

more details ...

+0

Uwielbiam tę bibliotekę. Elementy niektóre wywołania zwrotne. Nawet lepiej pasuje niż mongo-skin –

0

Lekko typo z odpowiedzią Chrisa.

Db.authenticate(user, password, function({ // callback })); 

powinny być

Db.authenticate(user, password, function(){ // callback }); 

Również w zależności od konfiguracji MongoDB, być może trzeba będzie podłączyć do administratora i auth tam pierwszy przed udaniem się do innej bazy danych. Będzie tak w przypadku, gdy nie dodasz użytkownika do bazy danych, do której próbujesz uzyskać dostęp. Następnie możesz autoryzować przez administratora, a następnie przełączać db, a następnie czytać lub pisać w dowolnym momencie.

7

Używam adresu URL Mongo pod ręką. Przechowuję adres URL w zmiennej środowiskowej i używam go do konfigurowania serwerów, podczas gdy wersja programistyczna używa domyślnego adresu URL bez hasła.

URL ma postać:

export MONGODB_DATABASE_URL=mongodb://USERNAME:[email protected]:DBPORT/DBNAME 

kod połączyć w ten sposób:

var DATABASE_URL = process.env.MONGODB_DATABASE_URL || mongodb.DEFAULT_URL; 

mongo_connect(DATABASE_URL, mongodb_server_options, 
     function(err, db) { 

      if(db && !err) { 
      console.log("connected to mongodb" + " " + lobby_db); 
      } 
      else if(err) { 
      console.log("NOT connected to mongodb " + err + " " + lobby_db); 
      } 
     });  
+1

Jeśli użytkownik jest w innej db niż DBNAME (jak admin), musisz dodać opcje "? AuthSource = admin" do adresu URL. – Getz

30

Każdy powinien użyć tego linku źródło:

http://mongodb.github.com/node-mongodb-native/contents.html

odpowiedź na pytanie :

var Db = require('mongodb').Db, 
    MongoClient = require('mongodb').MongoClient, 
    Server = require('mongodb').Server, 
    ReplSetServers = require('mongodb').ReplSetServers, 
    ObjectID = require('mongodb').ObjectID, 
    Binary = require('mongodb').Binary, 
    GridStore = require('mongodb').GridStore, 
    Code = require('mongodb').Code, 
    BSON = require('mongodb').pure().BSON, 
    assert = require('assert'); 

var db = new Db('integration_tests', new Server("127.0.0.1", 27017, 
{auto_reconnect: false, poolSize: 4}), {w:0, native_parser: false}); 

// Establish connection to db 
db.open(function(err, db) { 
    assert.equal(null, err); 

    // Add a user to the database 
    db.addUser('user', 'name', function(err, result) { 
    assert.equal(null, err); 

    // Authenticate 
    db.authenticate('user', 'name', function(err, result) { 
     assert.equal(true, result); 

     db.close(); 
    }); 
    }); 
}); 
+3

Dlaczego zawsze dodajesz użytkownika do bazy danych? –

+0

To jest przykład skopiowany z opublikowanego przeze mnie linku instrukcji sterownika ... metoda połączenia jest użyteczną częścią. – mattdlockyer

+0

Tylko dla informacji, mając nadzieję, że może pomóc komuś .. To nie działa, ponieważ 'null! = {}' I to sprawdzanie kończy się niepowodzeniem: 'assert.equal (null, err);' –

1

Z linku podanego przez @mattdlockyer jako odniesienie, to pracował dla mnie:

var mongo = require('mongodb'); 
var server = new mongo.Server(host, port, options); 
db = new mongo.Db(mydb, server, {fsync:true}); 
db.open(function(err, db) { 
    if(!err) { 
     console.log("Connected to database"); 
     db.authenticate(user, password, function(err, res) { 
      if(!err) { 
       console.log("Authenticated"); 
      } else { 
       console.log("Error in authentication."); 
       console.log(err); 
      } 
     }); 
    } else { 
     console.log("Error in open()."); 
     console.log(err); 
    }; 
}); 

exports.testMongo = function(req, res){ 
    db.collection(mycollection, function(err, collection) { 
     collection.find().toArray(function(err, items) { 
      res.send(items); 
     }); 
    }); 
}; 
-1

Używam Mongoose połączyć się MongoDB. Install Mongoose NPM za pomocą następującego polecenia

KMP zainstalować mangusta

var mongoose = require('mongoose'); 
mongoose.connect('mongodb://localhost:27017/database_name', function(err){ 
    if(err){ 
     console.log('database not connected'); 
    } 
}); 
var Schema = mongoose.Schema; 
var userschema = new Schema ({}); 
var user = mongoose.model('collection_name', userschema); 

możemy użyć zapytania jak to

user.find({},function(err,data){ 
     if(err){ 
     console.log(err); 
     } 
     console.log(data); 
    }); 
5

moja wersja:

var MongoClient = require('mongodb').MongoClient; 
MongoClient.connect('mongodb://user:[email protected]:port/baseName', function(err, db) { 
    if (err) { 
     console.error(err); 
    } 
    var collection = db.collection('collectionName'); 
    collection.find().toArray(function(err, docs) { 
     console.log(docs); 
    }); 
}); 
10
var mongo = require('mongodb'); 
var MongoClient = mongo.MongoClient;  
MongoClient.connect('mongodb://'+DATABASEUSERNAME+':'+DATABASEPASSWORD+'@'+DATABASEHOST+':'DATABASEPORT+'/'+DATABASENAME,function(err, db){ 
     if(err) 
     console.log(err); 
     else 
     { 
     console.log('Mongo Conn....'); 

     } 
    }); 
//for local server 
//in local server DBPASSWOAD and DBusername not required 
MongoClient.connect('mongodb://'+DATABASEHOST+':'+DATABASEPORT+'/'+DATABASENAME,function(err, db){ 
     if(err) 
     console.log(err); 
     else 
     { 
     console.log('Mongo Conn....'); 

     } 
    }); 
+0

doskonały ... dziękuję ... właśnie opuściłeś operatora konkatenacji '@' + DATABASEHOST + ':' + DATABASEPORT @Viral Patel – Prashant

0

Oto nowa maja do uwierzytelnienia z „admin”, a następnie przejść do żądanej DB do dalszych operacji:

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

var user = 'user'; 
var password = 'password'; 

MongoClient.connect('mongodb://'+user+':'+password+'@localhost:27017/opsdb',{native_parser:true, authSource:'admin'}, function(err,db){ 
    if(err){ 
     console.log("Auth Failed"); 
     return; 
    } 
    console.log("Connected"); 
    db.collection("cols").find({loc:{ $eq: null } }, function(err, docs) { 
     docs.each(function(err, doc) { 
      if(doc) { 
      console.log(doc['_id']); 
      } 
     }); 
    }); 

    db.close(); 

}); 
Powiązane problemy