2011-01-14 4 views
61

Comment me connecter à mongodb avec node.js?Comment me connecter à mongodb avec node.js (et authentifier)?

J'ai le pilote natif-mongodb-native.

Il existe apparemment 0 documentation.

Est-ce quelque chose comme ça?

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

Où puis-je mettre le nom d'utilisateur et le mot de passe?

Comment puis-je insérer quelque chose?

Merci.

+0

bons endroits pour commencer http://christiankvalheim.com/ et https: // GitHub. com/christkv/node-mongodb-native Cela dit, je travaille sur des documents appropriés au moment où nous parlons de la version v1 du pilote qui sera la première version 10gen officiellement supportée. – christkv

Répondre

40

par the source:

Après la connexion:

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

Je reçois une erreur "auth fail". –

+3

Je ne peux pas croire que cette réponse ait été tellement mise à jour avec des erreurs de syntaxe ... le rappel est mal défini. Voir ma solution et le lien source plus approprié ci-dessous: http://stackoverflow.com/a/15191273/1060487 – mattdlockyer

+0

J'ai d'abord essayé cela et cela n'a pas fonctionné mais c'est parce que je l'utilisais mal. J'utilisais les informations d'identification de mes utilisateurs dans admin. J'ai créé un utilisateur spécifiquement pour la base de données et utilisé ces informations d'identification. Travaillé comme un charme. Merci! –

3

Je recommande mongoskin Je viens de créer.

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

Est-ce que mongoskin synchronise? Nop, c'est asynchrone.

3

Cela a fonctionné pour moi:

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

Vous pouvez le faire comme ça

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

more details ...

+0

Aimez cette bibliothèque. Elements quelques rappels. Même un meilleur ajustement que mongo-skin –

0

faute de frappe légèrement avec la réponse de Chris.

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

devrait être

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

En outre, selon la configuration de votre MongoDB, vous devez vous connecter à admin et il auth avant d'aller à une autre base de données. Ce sera le cas si vous n'ajoutez pas d'utilisateur à la base de données à laquelle vous essayez d'accéder. Ensuite, vous pouvez authentifier via admin, puis passer db et ensuite lire ou écrire à volonté.

7

Je trouve l'utilisation d'un url Mongo à portée de main. Je stocke l'URL dans une variable d'environnement et l'utilise pour configurer les serveurs alors que la version de développement utilise une URL par défaut sans mot de passe.

L'URL a la forme:

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

code pour se connecter de cette façon:

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

Si l'utilisateur est dans un autre DB que DBNAME (comme admin), vous devez ajouter les options '? AuthSource = admin' à l'URL. – Getz

30

Tout le monde devrait utiliser ce lien source:

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

Réponse à la question :

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

Pourquoi ajouterais-tu toujours l'utilisateur à la base de données? –

+0

Ceci est un exemple, copié à partir du lien du manuel du conducteur que j'ai posté ... la méthode de connexion est la partie utile. – mattdlockyer

+0

Juste pour information, espérant que cela peut aider quelqu'un .. Cela ne fonctionne pas, à cause de 'null! = {}' Et cette vérification échoue: 'assert.equal (null, err);' –

1

Avec le lien fourni par @mattdlockyer comme référence, cela a fonctionné pour moi:

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

J'utilise Mongoose pour se connecter à MongoDB. Installer mangouste NPM en utilisant la commande suivante

NPM installer mangouste

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

nous pouvons utiliser les requêtes comme celui-ci

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

Ma version:

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

parfait ... merci ... vous venez de quitter l'opérateur de concaténation '@' + DATABASEHOST + ':' + DATABASEPORT @Viral Patel – Prashant

0

est ici nouveau mai pour authentifier de « admin » et puis passer à votre base de données souhaité pour d'autres opérations:

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

}); 
Questions connexes