Una aplicación implementada en heroku que se conecta a mongoDB tendrá problemas en este intento de conexión porque las direcciones IP que se conectan a mongoDB deben incluirse en la lista blanca dentro de mongo.
Los documentos de MongoDB aquí dicen:
Para otorgar acceso programático a una organización o proyecto utilizando solo la API, cree una clave de API.
Las claves API tienen dos partes: una clave pública y una clave privada. No puede usar una clave API para iniciar sesión en Atlas a través de la interfaz de usuario.
Todas las claves API pertenecen a la organización, pero se les puede dar acceso a un proyecto.
Para crear y administrar claves de API, use el Administrador de acceso.
Cuando crea una nueva clave de API, Atlas otorga a la clave los siguientes permisos:
Así es como me conecté en desarrollo:
claves.js:
module.exports = { mongoURI: `mongodb+srv://user:password@cluster0.xl.mongodb.net/administrators?retryWrites=true&w=majority`, jwtSecret: 'secret' }servidor.js:
const db = require("./config/keys").mongoURI mongoose .connect(db, { useNewUrlParser: true, useUnifiedTopology: true }) .then(() => console.log("MongoDB connected")) .catch(err => console.log(err))Lo que todavía no entiendo es cómo conectarme a mongoDB desde una aplicación node.js implementada por heroku una vez que haya inicializado una clave api.
Dado que heroku dyno siempre tiene una IP aleatoria de un conjunto de rangos, puede haber 3 formas posibles:
Usar rangos de IP publicados por Heroku para permitir el acceso a Heroku Dynos. Esto no es muy recomendable ya que Heroku puede cambiar esos rangos que pueden cambiar.
Utilice complementos para proporcionar IP estática de salida a su aplicación que puede agregar en el acceso a la red de Atlas.
Compre espacios privados de Heroku que son algo expansivos
Además, si no puede permitirse el lujo de optar por ambas opciones recomendadas, puede permitir el acceso desde cualquier lugar, lo que tampoco es muy recomendable si está creando una aplicación para producción.
Espero que ayude