Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

110
Vistas
Cómo crear un módulo usando mongoose para compartir una conexión DB cambiante

He estado trabajando en una aplicación (Node.js con MongoDB usando mongoose), y el servidor se conecta a 2 bases de datos diferentes, 1 genérico que contiene pares de nombre de usuario y contraseña para la autenticación del usuario. Luego, cuando el usuario inicia sesión, quiero conectarme a una base de datos diferente, con el nombre del ID de usuario del usuario. Logré crear un módulo para compartir la base de datos genérica de UA, pero es más difícil con el segundo, ya que no se abre con la conexión, sino más adelante, cuando el usuario inicia sesión. Supongo que me inspiré en la idea. de reaccionar contexto tipo de intercambio.

Hasta ahora tengo algo como esto

 const mongoose = require("mongoose"); /* UA = User Authentication US = User Specific DB = DataBase */ const UA_DB = mongoose.createConnection(/*...*/); ); const User = UA_DB.model("User", require("../../data-schemas/user")); let US_DB, Order, Item, Ingredient, Place; console.log("opened UA database"); function sendUserId(newUserId) { userId = newUserId; US_DB = mongoose.createConnection(/*... ${newUserId} ...*/ ); Order = US_DB.model("Order", require("../../data-schemas/order")); Item = US_DB.model("Item", require("../../data-schemas/item")); Ingredient = US_DB.model( "Ingredient", require("../../data-schemas/ingredient") ); Place = US_DB.model("Place", require("../../data-schemas/place")); console.log("opened US database"); } module.exports = { UA_DB: { User, }, US_DB: { Order, Item, Ingredient, Place, }, sendUserId, };

Ahora, si no lo hubiera dejado claro, el primero, UA_DB funciona bien, el usuario inicia sesión bien... Cuando se trata de US_DB, siempre obtengo valores indefinidos (no se puede leer la propiedad 'buscar' de indefinido) . Sospecho que el problema podría ser que el valor exportado no se actualiza con el valor de las variables. ¿Alguna idea, cómo podría solucionarse esto?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Bueno, lo descubrí. En lugar de usar valores precisos, uso una función para devolverlos y para conectarme a la base de datos. El ID de usuario se almacena en un token, así que después de la verificación verifico si ya estoy conectado a la base de datos correcta (con la variable de ID de usuario, que almacena valores) y luego devolver los valores actuales de los modelos ahora mi código se parece a esto

 const mongoose = require("mongoose"); /* UA = User Authentication US = User Specific DB = DataBase */ const UA_DB = mongoose.createConnection(/* ... */ ); const User = UA_DB.model("User", require("../../data-schemas/user")); let US_DB, Order, Item, Ingredient, Place = "some default value"; console.log("opened UA database"); let userId = ""; function getUS_DBModels(newUserId) { if (newUserId !== userId) { userId = newUserId; US_DB = mongoose.createConnection(`...${userId}...` ); Order = US_DB.model("Order", require("../../data-schemas/order")); Item = US_DB.model("Item", require("../../data-schemas/item")); console.log("opened a US_DB connection"); Ingredient = US_DB.model( "Ingredient", require("../../data-schemas/ingredient") ); Place = US_DB.model("Place", require("../../data-schemas/place")); } return { Order, Item, Ingredient, Place } } module.exports = { UA_DB: { User, }, getUS_DBModels, };

Para quien se lo pregunte, en diferentes módulos se puede acceder a valores como este

 const dbHandler = require("./path/to/the/module"); const { Item } = dbHandler.getUS_DBModels("UserId");
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda