Не удается подключиться к MongoDB, размещенной на mlab - PullRequest
0 голосов
/ 25 ноября 2018

Фон

Создание небольшого веб-приложения, которое подключается к базе данных Mongo, размещенной на Mlab .Я создал базу данных на mlab и создал пользователей с правами чтения / записи.Я также создал коллекцию users с несколькими записями.

Проблема

Когда я пытаюсь подключиться к базе данных, используя код mongo.github.io , Я нажал на ошибку:

/home/ed/dev/mongo-demo/node_modules/mongodb/lib/operations/mongo_client_ops.js:466
      throw err;
      ^

TypeError: Cannot read property 'db' of null

Код

var MongoClient = require('mongodb').MongoClient;
const url = 'mongodb://<user>:<pass>@ds115434.mlab.com:15434';

// Database Name
const dbName = 'princee3-music';

// Use connect method to connect to the server
MongoClient.connect(url, function(err, client) {
  console.log("Connected successfully to server");

  const db = client.db(dbName);

  client.close();
});

Что я пробовал

Странно, если я подключаюсь через оболочку, используя:

mongo ds115434.mlab.com:15434/princee3-music -u <dbuser> -p <dbpassword>

Это прекрасно работает, или, если я обертываю соединение в анонимную асинхронную функцию с самозвонком, она также подключается.

Async Wrapper

const MongoClient = require('mongodb').MongoClient;
const mongoUrl = 'mongodb://<user>:<pass>@ds115434.mlab.com:15434/';
const dbName = 'princee3-music';

(async() => {
   const client = await MongoClient.connect(mongoUrl, { useNewUrlParser: true});
   const db = client.db(dbName);
   db.collection('users').insertOne({
     email: user.email,
     pass: hashedPassword,
     admin: true
   }, (err, result) => {
     if (err) {
       reject({error: err});
     } else {
       resolve({message: 'okay'});
     }
   });
   client.close();
 })();

Любые указатели на гдеЯ могу пойти не так, как надо.

1 Ответ

0 голосов
/ 25 ноября 2018

Официальные документы mLab советуют подключать, как показано ниже.Он должен быть асинхронным, чтобы ожидать установления соединения, иначе клиент будет иметь значение NULL, что выдает ошибку, говорящую о том, что он не может прочитать свойство db, равное NULL.

С другой стороны,у вас async есть useNewUrlParser, который может быть ключом к успешному соединению, см. эту проблему

MongoClient.connect(url, { useNewUrlParser: true }).then(client => client.db())
...