MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Verbinden der Heroku-App mit dem Atlas MongoDB Cloud-Dienst

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();
});