Cosa penso potrebbe risolvere il tuo problema
Disclaimer: Non ho usato né Heroku né MongoDB Atlas ma li sto esaminando.
Secondo un problema con Github che ho riscontrato, riceverai quel messaggio di errore se non hai autorizzato gli indirizzi IP del server in MongoDB Atlas.
Leggendo i documenti di MongoDB Atlas, l'unico modo che vedo per farlo in combinazione con Heroku dynos è aggiungere 0.0.0.0/0
(ovvero tutti gli indirizzi) nella whitelist di MongoDB Atlas.
Fai un tentativo e segnala se puoi creare un'istanza di connessione.
Su SSL
Cercando di rispondere alla domanda SSL, non credo che tu debba abilitarlo su Heroku in base a quanto ho letto, anche se non ne sono del tutto sicuro.
Se il server MongoDB ha eseguito la convalida del certificato, il codice Node.js per la connessione dovrebbe essere simile al seguente (tratto dalla documentazione del driver 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();
});
Se il server MongoDB non verifica la presenza di certificati SSL, puoi semplicemente utilizzare un codice come il seguente (anch'esso preso dalla documentazione del driver Node.js):
var MongoClient = require('mongodb').MongoClient;
MongoClient.connect("mongodb://localhost:27017/test?ssl=true", function(err, db) {
db.close();
});
Dato che la documentazione Atlas contiene il seguente codice di esempio per la connessione da Node.js, penso che tu non devi abilitare SSL su 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();
});