¿Dónde inicializar una nueva conexión de base de datos en nodejs?

¿Debería crear una instancia de la conexión de base de datos fuera del scope de los manejadores de ruta, o crear una para cada manejador (por ejemplo, app.get('/todos') )?

Corríjame si me equivoco, pero supongo que el primer enfoque es mejor porque puede reutilizar la misma conexión. Sin embargo, he visto otros ejemplos que crean uno para cada controlador de ruta.

¿Cuál es el enfoque recomendado? ¿O es importante debido a cómo la base de datos puede almacenar en caché las conexiones en su extremo?

EDITAR: Puedo estar confundido acerca de cómo se conectan los controladores de base de datos. La mayoría proporciona un método como connectDB(config) donde se especifica la ubicación del recurso, la autenticación, etc. ¿Esto realmente está haciendo una conexión o inicia la conexión cuando realmente solicita algo con ese objeto de base de datos?

Debes hacer tu conexión una vez y usarla en todos los manejadores.

Si se está reconectando a la base de datos en cada solicitud, utilizará una gran cantidad de recursos y boostá la latencia, por no mencionar el martilleo de su base de datos con reconexiones inútiles.

Las conexiones de base de datos están destinadas a ser persistentes, no cosas de una sola vez.

No dijo qué base de datos utiliza, pero en el ejemplo de Mongo, cuando se conecta a la base de datos con el controlador nativo MongoDB Node.js, hay algunas opciones que puede usar, como:

  • poolSize : establece el poolSize máximo para cada servidor individual o conexión proxy (el valor predeterminado es 5 )
  • autoReconnect : autoReconnect conectar en caso de error (el valor predeterminado es true )

Algunas otras opciones interesantes son: keepAlive , connectTimeoutMS , socketTimeoutMS , connectTimeoutMS , socketTimeoutMS .

Puede cambiar los valores de esas opciones si no está satisfecho con los valores predeterminados, pero esas opciones existen para administrar una conexión de larga duración, no para volver a conectarse y desconectarse en cada solicitud.

Para más información ver:

  • Fallos de conexión y rebashs
  • MongoClient o cómo conectarse de una manera nueva y mejor.
  • Tutoriales / Conectar a MongoDB
  • Referencia / Opciones de conexión / Configuración de conexión
  • Pregunta sobre la auto-reconexión del controlador node.js mongo (lista de correo)

Vea también esta respuesta para más información:

  • Usando mongoDB en enrutadores Express