Co moim zdaniem może rozwiązać Twój problem
Zastrzeżenie: Nie używałem ani Heroku, ani MongoDB Atlas, ale przyglądam się im.
Zgodnie z problemem, który znalazłem na Github, otrzymasz ten komunikat o błędzie, jeśli nie umieściłeś adresów IP serwerów w Atlasie MongoDB.
Czytając dokumentację MongoDB Atlas, jedynym sposobem, jaki widzę, aby to zrobić w połączeniu z hamowniami Heroku, jest dodanie 0.0.0.0/0
(tj. wszystkie adresy) do białej listy MongoDB Atlas.
Spróbuj i zgłoś, czy możesz nawiązać połączenie.
Włącz SSL
Próbując odpowiedzieć na pytanie SSL, nie sądzę, że musisz włączyć go w Heroku na podstawie tego, co przeczytałem, chociaż nie jestem do końca pewien.
Gdyby serwer MongoDB wykonał weryfikację certyfikatu, kod Node.js do połączenia z nim musiałby wyglądać następująco (zaczerpnięty z dokumentacji sterownika 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();
});
Jeśli serwer MongoDB nie sprawdza żadnych certyfikatów SSL, możesz po prostu użyć poniższego kodu (także zaczerpniętego z dokumentacji sterownika Node.js):
var MongoClient = require('mongodb').MongoClient;
MongoClient.connect("mongodb://localhost:27017/test?ssl=true", function(err, db) {
db.close();
});
Biorąc pod uwagę, że dokumentacja Atlas zawiera następujący przykładowy kod do łączenia się z nim z Node.js, myślę, że nie trzeba włączyć SSL w 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();
});