Muirik
Muirik

Reputation: 6289

Not Able to Connect to Password-protected MongoDB Server/DB

After successfully testing my Node app against a local mongoDB db, I am now trying to connect to our server db - which, unlike my local mongoDB, is user and password protected.

I am running into issues while trying the connection to the server. Specifically, I am getting this error:

MongoError: MongoClient must be connected before calling MongoClient.prototype.db

The creds I'm trying look something like this:

{
  "MONGO_URL": "mongodb://myuser:[email protected]:27017?authSource=admin",
  "MONGO_DATABASE": "bta",
  "MONGO_COLLECTION": "jobs"
}

And here is my connection code:

const config = require('./configuration');
const url = config.get('MONGO_URL');
const dbName = config.get('MONGO_DATABASE');

const MongoClient = require('mongodb').MongoClient;
const client = new MongoClient(url);

async function getJobDetails() {
  client.connect(async function () {
    try {
      const db = await client.db(dbName);
      // do stuff
     });
    } catch (error) {
      console.log(error);
    }
  });
}

What am I missing here?

Upvotes: 0

Views: 232

Answers (3)

Muirik
Muirik

Reputation: 6289

I figured out what the issue was and was able to get it to connect. The issue was that the site is secure, so I had to add ssl=true to the url connection string:

const url = 'mongodb://user:[email protected]:27017/bta?ssl=true&authSource=admin';

Upvotes: 1

Mohamed Abu Galala
Mohamed Abu Galala

Reputation: 438

As MongoDB. https://mongodb.github.io/node-mongodb-native/3.2/tutorials/connect/

And please Try double checking DB on the server if it has the right config.

const MongoClient = require('mongodb').MongoClient;
const assert = require('assert');

// Connection URL with password example
const url = 'mongodb://user:password@address:27017?readPreference=primary&authSource=admin';

// Database Name
const dbName = 'myproject';

// Create a new MongoClient
const client = new MongoClient(url);

// Use connect method to connect to the Server
client.connect(function(err) {
  assert.equal(null, err);
  console.log("Connected successfully to server");

  const db = client.db(dbName);

  client.close();
});

This works for both valid localhost/server url

Checking code

Upvotes: 0

ghost_duke
ghost_duke

Reputation: 121

try:

const mongoClient = require('mongodb').MongoClient;

mongoClient.connect(url, { useNewUrlParser: true }, function(client_err, client) {
    if (client != null) {
        var client_db = client.db(dbName);
    }
    client.close();
});

Upvotes: 0

Related Questions