Това, което мисля, може да реши проблема ви
Отказ от отговорност: Не съм използвал нито Heroku, нито MongoDB Atlas, но ги разглеждам.
Според проблем с Github, който открих, ще получите това съобщение за грешка, ако не сте поставили в белия списък IP адресите на сървъра в MongoDB Atlas.
Четейки документите MongoDB Atlas, единственият начин, който виждам да направя това в комбинация с Heroku dynos, е да добавя 0.0.0.0/0
(т.е. всички адреси) към белия ви списък на MongoDB Atlas.
Опитайте и моля, докладвайте дали можете да инстанцирате връзка.
На SSL
Опитвайки се да отговоря на въпроса за SSL, не мисля, че трябва да го активирате на Heroku въз основа на това, което прочетох, въпреки че не съм напълно сигурен.
Ако сървърът MongoDB извърши валидиране на сертификат, кодът на Node.js за свързване с него трябва да изглежда по следния начин (взет от документацията на драйвера на Node.js):
var MongoClient = require('mongodb').MongoClient,
f = require('util').format,
fs = require('fs');
// Read the certificates
var ca = [fs.readFileSync(__dirname + "/ssl/ca.pem")];
var cert = fs.readFileSync(__dirname + "/ssl/client.pem");
var key = fs.readFileSync(__dirname + "/ssl/client.pem");
// Connect validating the returned certificates from the server
MongoClient.connect("mongodb://localhost:27017/test?ssl=true", {
server: {
sslValidate:true
, sslCA:ca
, sslKey:key
, sslCert:cert
, sslPass:'10gen'
}
}, function(err, db) {
db.close();
});
Ако сървърът на MongoDB не проверява за никакви SSL сертификати, можете просто да използвате код като следния (също взет от документацията на драйвера на Node.js):
var MongoClient = require('mongodb').MongoClient;
MongoClient.connect("mongodb://localhost:27017/test?ssl=true", function(err, db) {
db.close();
});
Като се има предвид, че документацията на Atlas съдържа следния примерен код за свързване към него от Node.js, мисля, че не трябва да активирате SSL на Heroku:
var MongoClient = require('mongodb').MongoClient;
var uri = "mongodb://kay:[email protected]:27017,mycluster0-shard-00-01-wpeiv.mongodb.net:27017,mycluster0-shard-00-02-wpeiv.mongodb.net:27017/admin?ssl=true&replicaSet=Mycluster0-shard-0&authSource=admin";
MongoClient.connect(uri, function(err, db) {
db.close();
});