Як підключитися до mongodb за допомогою node.js (та автентифікуватись)?


76

Як підключитися до mongodb за допомогою node.js?

У мене є драйвер node-mongodb-native.

Там, мабуть, 0 документації.

Це щось подібне?

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

Куди покласти ім’я користувача та пароль?

Також як мені щось вставити?

Дякую.


1
Хороші місця для початку christiankvalheim.com та github.com/christkv/node-mongodb-native. Це означає, що я працюю над належними документами, коли ми говоримо про випуск драйвера v1, який буде першою офіційно підтримуваною версією 10gen.
christkv

Відповіді:


43

За джерелом :

Після підключення:

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

6
Не можу повірити, що ця відповідь так сильно проголосувала із синтаксичними помилками ... зворотний виклик погано визначений. Дивіться моє рішення і більш відповідний джерело посилання нижче: stackoverflow.com/a/15191273/1060487
mattdlockyer

Я вперше спробував це, і це не спрацювало, але це тому, що я використовував це неправильно. Я використовував облікові дані своїх користувачів в адміністраторі. Я створив користувача спеціально для бази даних і використовував ці облікові дані. Працював як оберіг. Дякую!
Роберт Броден,

Db більше не має методу автентифікації, оскільки версія драйвера 3.1. mongodb.github.io/node-mongodb-native/3.1/api/Db.html
toadead

38

Кожен повинен використовувати це джерело:

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

Відповідь на запитання:

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
Чому ви завжди додаєте користувача до бази даних?
bruno nery

Це приклад, скопійований із посилання на інструкцію до драйвера, яке я розмістив ... Метод підключення є корисною частиною.
mattdlockyer

Тільки для інформації, сподіваючись, що комусь може допомогти .. Це не працює, тому що null != {}і ця перевірка не вдається:assert.equal(null, err);
Даніеле Врут

Можливо, ручний приклад вже застарів, і є нова версія Mongo, дякую за інформацію!
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....');

      }
    });

ідеально ... дякую ... u щойно вийшов оператор конкатенації '@' + DATABASEHOST + ':' + DATABASEPORT @Viral Patel
Prashant

9

Я вважаю, що використання монго-адреси зручно. Я зберігаю URL-адресу у змінній середовища і використовую її для налаштування серверів, тоді як версія для розробки використовує URL-адресу за замовчуванням без пароля.

URL-адреса має вигляд:

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

Код для підключення таким чином:

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
Якщо користувач знаходиться в іншій базі даних, ніж DBNAME (наприклад, адміністратор), вам потрібно додати параметри ?authSource=adminдо URL-адреси.
Гец

7

Моя версія:

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

Я рекомендую монгоскін, який я щойно створив.

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

Синхронізація mongoskin? Ні, це асинхронно.


3

Це спрацювало для мене:

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

Не працює на новіших версіях драйвера. Метод db.authenticate () більше не існує. Принаймні, він не існує в драйвері node.js 3.1, яким я користуюся. Я отримую помилку "db.authenticate не є функцією" у консолі Інспектора вузлів.
Девід Едвардс

3

Ось новий травень для автентифікації від "адміністратора", а потім перехід до потрібної БД для подальших операцій:

   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
Це лише ім’я підключення для db.
веселий


1

якщо ви продовжуєте мати проблеми з рідним драйвером, ви також можете перевірити сонного мангуста. Це сервер REST пітона, до якого ви можете просто отримати доступ із запитом вузла, щоб дістатися до вашого екземпляра Mongo. http://www.snailinaturtleneck.com/blog/2010/02/22/sleepy-mongoose-a-mongodb-rest-interface/


1

З посиланням, наданим @mattdlockyer як посилання, це спрацювало для мене:

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

Невелика друкарська помилка з відповіддю Кріса.

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

має бути

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

Також залежно від вашої конфігурації mongodb, можливо, вам доведеться спочатку підключитися до адміністратора та авторизуватися, перш ніж переходити до іншої бази даних. Це буде так, якщо ви не додасте користувача до бази даних, до якої ви намагаєтесь отримати доступ. Потім ви можете авторизуватися через адміністратора, а потім перемкнути db, а потім читати або писати за бажанням.


-2

Я використовую Mongoose для підключення до mongodb. Встановіть mongoose npm, використовуючи наступну команду

npm встановити мангуст

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

ми можемо використовувати такі запити

user.find({},function(err,data){
         if(err){
         console.log(err);
         }
        console.log(data);
    });
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.