Was meiner Meinung nach Ihr Problem lösen könnte
Haftungsausschluss: Ich habe weder Heroku noch MongoDB Atlas verwendet, aber ich untersuche sie.
Laut einem Github-Problem, das ich gefunden habe, erhalten Sie diese Fehlermeldung, wenn Sie die Server-IP-Adressen nicht in MongoDB Atlas auf die weiße Liste gesetzt haben.
Beim Lesen der MongoDB-Atlas-Dokumentation sehe ich die einzige Möglichkeit, dies in Kombination mit Heroku-Dynos zu tun, darin, 0.0.0.0/0
hinzuzufügen (d. h. alle Adressen) zu Ihrer MongoDB-Atlas-Whitelist.
Probieren Sie das aus und berichten Sie bitte, ob Sie eine Verbindung herstellen können.
Auf SSL
Um auf die SSL-Frage zu antworten, denke ich nicht, dass Sie es auf Heroku aktivieren müssen, basierend auf dem, was ich gelesen habe, obwohl ich mir nicht ganz sicher bin.
Wenn der MongoDB-Server die Zertifikatvalidierung durchgeführt hat, müsste der Node.js-Code für die Verbindung damit wie folgt aussehen (aus der Dokumentation des Node.js-Treibers entnommen):
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();
});
Wenn der MongoDB-Server nicht nach SSL-Zertifikaten sucht, können Sie einfach Code wie den folgenden verwenden (ebenfalls aus der Node.js-Treiberdokumentation entnommen):
var MongoClient = require('mongodb').MongoClient;
MongoClient.connect("mongodb://localhost:27017/test?ssl=true", function(err, db) {
db.close();
});
Angesichts der Tatsache, dass die Atlas-Dokumentation den folgenden Beispielcode zum Herstellen einer Verbindung von Node.js enthält, denke ich, dass Sie dies nicht tun muss SSL auf Heroku aktivieren:
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();
});