sql >> Base de Datos >  >> NoSQL >> MongoDB

Conexión de la aplicación Heroku al servicio en la nube Atlas MongoDB

Lo que creo que podría solucionar tu problema

Descargo de responsabilidad: No he usado ni Heroku ni MongoDB Atlas, pero los estoy investigando.

De acuerdo con un problema de Github que encontré, recibirá ese mensaje de error si no ha incluido en la lista blanca las direcciones IP del servidor en MongoDB Atlas.

Al leer los documentos de MongoDB Atlas, la única forma que veo de hacer esto en combinación con Heroku dynos es agregar 0.0.0.0/0 (es decir, todas las direcciones) a su lista blanca de MongoDB Atlas.

Pruébelo e infórmenos si puede instanciar una conexión.

En SSL

Intentando responder a la pregunta de SSL, no creo que necesite habilitarlo en Heroku según lo que leí, aunque no estoy totalmente seguro.

Si el servidor MongoDB realizó la validación del certificado, el código de Node.js para conectarse tendría que tener el siguiente aspecto (tomado de la documentación del controlador de 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();
});

Si el servidor MongoDB no busca ningún certificado SSL, simplemente puede usar un código como el siguiente (también tomado de la documentación del controlador Node.js):

var MongoClient = require('mongodb').MongoClient;

MongoClient.connect("mongodb://localhost:27017/test?ssl=true", function(err, db) {
  db.close();
});

Dado que la documentación de Atlas contiene el siguiente código de ejemplo para conectarse desde Node.js, creo que no tiene que habilitar SSL en 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();
});