Uso del Patrón Singleton en Node.js con Mongoose
El patrón Singleton es un patrón de diseño creacional que garantiza que una clase tenga una única instancia y proporciona un punto de acceso global a esa instancia. En el contexto de Node.js y Mongoose, este patrón es especialmente útil para gestionar la conexión a la base de datos de MongoDB, asegurando que no se creen múltiples conexiones accidentales, lo que podría afectar el rendimiento y la estabilidad de la aplicación.
¿Por qué usar Singleton en Mongoose?
Rendimiento: Abrir varias conexiones a la base de datos puede sobrecargar tanto la aplicación como el servidor de MongoDB. El patrón Singleton permite reutilizar una única conexión, mejorando el rendimiento.
Seguridad: Tener un control centralizado sobre la conexión a la base de datos garantiza que no se generen conexiones innecesarias que podrían provocar vulnerabilidades o puntos débiles.
Implementando el Patrón Singleton para la Conexión a MongoDB
A continuación, te muestro cómo podemos implementar el patrón Singleton para la conexión a MongoDB usando Mongoose:
Importaciones y Configuración Inicial
.env
. Esto permite que la URL de conexión sea segura.MONGODB_URI
para utilizar la base de datos local o MONGODB_ATLAS
para la base de datos en Atlas (MongoDB en la nube).Clase MongoConnection
- Constructor: Inicializa la clase con la propiedad
connection
, que inicialmente es null
. Esta propiedad será utilizada para almacenar la conexión a la base de datos y evitar que se creen múltiples conexiones.
connection
, que inicialmente es null
. Esta propiedad será utilizada para almacenar la conexión a la base de datos y evitar que se creen múltiples conexiones.Método connectToLocal()
this.connection
no es null
), se reutiliza la conexión existente y se devuelve.mongoose.connect(url)
.Método connectToAtlas()
:
- Funciona igual que el método
connectToLocal()
, pero conecta a MongoDB Atlas. La lógica es similar: si ya existe una conexión, se reutiliza, y si no, se establece una nueva conexión con Atlas.
connectToLocal()
, pero conecta a MongoDB Atlas. La lógica es similar: si ya existe una conexión, se reutiliza, y si no, se establece una nueva conexión con Atlas.Instancia Única (Singleton)
- Aquí se crea una única instancia de la clase
MongoConnection
, llamada mongoInstance
. Esta instancia será la que se use en toda la aplicación, asegurando que solo haya una conexión única y global a la base de datos.
MongoConnection
, llamada mongoInstance
. Esta instancia será la que se use en toda la aplicación, asegurando que solo haya una conexión única y global a la base de datos.Beneficios de Usar Singleton
Eficiencia: Evita la creación de múltiples conexiones, lo que reduce la carga de tu aplicación y mejora el uso de recursos.
Fácil Mantenimiento: Centralizar la lógica de la conexión a la base de datos simplifica el mantenimiento del código, especialmente en proyectos grandes.
Mejor Rendimiento: Al mantener una única conexión activa, se optimiza el manejo de los recursos del servidor y se mejora la latencia.
Comentarios
Publicar un comentario