Wie verbinde ich mich mit node.js mit mongodb (und authentifiziere mich)?


75

Wie verbinde ich mich mit node.js mit mongodb?

Ich habe den Node-Mongodb-Native-Treiber.

Es gibt anscheinend 0 Dokumentation.

Ist es so etwas?

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

Wo lege ich den Benutzernamen und das Passwort ab?

Wie füge ich auch etwas ein?

Vielen Dank.


1
Gute Startpunkte christiankvalheim.com und github.com/christkv/node-mongodb-native Das heißt, ich arbeite an den richtigen Dokumenten, während wir für die Version 1 des Treibers sprechen, der die erste offiziell unterstützte 10gen-Version sein wird.
Christkv

Antworten:


43

Laut Quelle :

Nach dem Anschließen:

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

6
Ich kann nicht glauben, dass diese Antwort so sehr mit Syntaxfehlern bewertet wurde ... der Rückruf ist schlecht definiert. Siehe meine Lösung und passenderen Quelllink
mattdlockyer

Ich habe es zuerst versucht und es hat nicht funktioniert, aber das liegt daran, dass ich es falsch verwendet habe. Ich habe die Anmeldeinformationen meiner Benutzer in admin verwendet. Ich habe einen Benutzer speziell für die Datenbank erstellt und diese Anmeldeinformationen verwendet. Lief wie am Schnürchen. Vielen Dank!
Robert Broden

Db hat ab Treiberversion 3.1 keine Authentifizierungsmethode mehr. mongodb.github.io/node-mongodb-native/3.1/api/Db.html
toadead

37

Jeder sollte diesen Quelllink verwenden:

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

Antwort auf die Frage:

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

6
Warum würden Sie den Benutzer immer zur Datenbank hinzufügen?
Bruno Nery

Dies ist ein Beispiel, das aus dem von mir geposteten Link zum Treiberhandbuch kopiert wurde. Die Verbindungsmethode ist der nützliche Teil.
Mattdlockyer

Nur zur Information, in der Hoffnung, dass das jemandem helfen kann. Dies funktioniert nicht, weil null != {}und diese Überprüfung fehlschlägt:assert.equal(null, err);
Daniele Vrut

Vielleicht ist das manuelle Beispiel jetzt veraltet und es gibt eine neuere Version von Mongo, danke für die Info!
Mattdlockyer

14
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....');

      }
    });

perfekt ... danke ... du hast gerade den Verkettungsoperator '@' + DATABASEHOST + 'verlassen:' + DATABASEPORT @Viral Patel
Prashant

9

Ich finde es praktisch, eine Mongo-URL zu verwenden. Ich speichere die URL in einer Umgebungsvariablen und konfiguriere damit Server, während die Entwicklungsversion eine Standard-URL ohne Kennwort verwendet.

Die URL hat die Form:

export MONGODB_DATABASE_URL=mongodb://USERNAME:PASSWORD@DBHOST:DBPORT/DBNAME

Code zum Verbinden auf diese Weise:

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
Wenn sich der Benutzer in einer anderen Datenbank als DBNAME befindet (z. B. admin), müssen Sie die Optionen ?authSource=adminzur URL hinzufügen .
Getz

7

Meine Version:

var MongoClient = require('mongodb').MongoClient;
MongoClient.connect('mongodb://user:pass@dhost:port/baseName', function(err, db) {
    if (err) {
        console.error(err);
    }
    var collection = db.collection('collectionName');
    collection.find().toArray(function(err, docs) {
        console.log(docs);
    });
});

4

Ich empfehle Mongoskin, das ich gerade erstellt habe.

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

Ist Mongoskin synchron? Nein, es ist asynchron.


3

Das hat bei mir funktioniert:

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

Funktioniert nicht mit neueren Versionen des Treibers. Die Methode db.authenticate () existiert nicht mehr. Zumindest ist es in dem von mir verwendeten node.js 3.1-Treiber nicht vorhanden. Ich erhalte den Fehler "db.authenticate ist keine Funktion" in der Node Inspector-Konsole.
David Edwards

3

Hier ist eine neue Möglichkeit, sich von "admin" zu authentifizieren und dann für weitere Vorgänge zu Ihrer gewünschten Datenbank zu wechseln:

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

}); 

1
Das ist nur der Verbindungsname für db.
lustiger



1

Mit dem von @mattdlockyer als Referenz bereitgestellten Link funktionierte dies für mich:

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

0

Leichter Tippfehler mit Chris 'Antwort.

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

sollte sein

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

Abhängig von Ihrer Mongodb-Konfiguration müssen Sie möglicherweise zuerst eine Verbindung zum Administrator herstellen und dort authentifizieren, bevor Sie zu einer anderen Datenbank wechseln können. Dies ist der Fall, wenn Sie der Datenbank, auf die Sie zugreifen möchten, keinen Benutzer hinzufügen. Dann können Sie über admin authentifizieren und dann die Datenbank wechseln und dann nach Belieben lesen oder schreiben.


-2

Ich benutze Mongoose, um mich mit Mongodb zu verbinden. Installieren Sie mongoose npm mit dem folgenden Befehl

npm Mungo installieren

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

Wir können die Abfragen so verwenden

user.find({},function(err,data){
         if(err){
         console.log(err);
         }
        console.log(data);
    });
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.