MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Conectando o aplicativo Heroku ao serviço Atlas MongoDB Cloud

O que acho que pode resolver seu problema


Isenção de responsabilidade: Eu não usei nem o Heroku nem o MongoDB Atlas, mas estou analisando-os.

De acordo com um problema do Github que encontrei, você receberá essa mensagem de erro se não tiver colocado na lista de permissões os endereços IP do servidor no MongoDB Atlas.

Lendo os documentos do MongoDB Atlas, a única maneira que vejo de fazer isso em combinação com o Heroku dynos é adicionar 0.0.0.0/0 (ou seja, todos os endereços) à sua lista de permissões do MongoDB Atlas.

Experimente e informe se você pode instanciar uma conexão.

Em SSL


Tentando responder à pergunta do SSL, não acho que você precise habilitá-lo no Heroku com base no que li, embora não tenha certeza absoluta.

Se o servidor MongoDB executasse a validação do certificado, o código Node.js para se conectar a ele teria que se parecer com o seguinte (retirado da documentação do 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 o servidor MongoDB não verificar nenhum certificado SSL, você pode simplesmente usar um código como o seguinte (também retirado da documentação do driver Node.js):
var MongoClient = require('mongodb').MongoClient;

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

Dado que a documentação do Atlas contém o seguinte código de exemplo para se conectar a ele a partir do Node.js, acho que você não tem que habilitar o SSL no 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();
});