Vad jag tror kan lösa ditt problem
Ansvarsfriskrivning: Jag har varken använt Heroku eller MongoDB Atlas men jag tittar på dem.
Enligt ett Github-problem som jag hittade kommer du att få det felmeddelandet om du inte har vitlistat serverns IP-adresser i MongoDB Atlas.
När jag läser MongoDB Atlas-dokumenten är det enda sättet jag ser för att göra detta i kombination med Heroku dynos att lägga till 0.0.0.0/0
(dvs alla adresser) till din MongoDB Atlas vitlista.
Ge det ett försök och rapportera tillbaka om du kan instansiera en anslutning.
På SSL
Försöker svara på SSL-frågan, jag tror inte att du behöver aktivera den på Heroku baserat på vad jag läst, även om jag inte är helt säker.
Om MongoDB-servern utförde certifikatvalidering, måste Node.js-koden för att ansluta till den se ut så här (tagen från Node.js-drivrutinen):
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();
});
Om MongoDB-servern inte letar efter några SSL-certifikat kan du helt enkelt använda kod som följande (även hämtad från Node.js-drivrutinen):
var MongoClient = require('mongodb').MongoClient;
MongoClient.connect("mongodb://localhost:27017/test?ssl=true", function(err, db) {
db.close();
});
Med tanke på att Atlas-dokumentationen innehåller följande exempelkod för att ansluta till den från Node.js, tror jag att du inte måste aktivera SSL på 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();
});