Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

159
Views
Usar el objeto de la base de datos después de que se haya creado

Estoy tratando de construir un servidor express.

En el archivo app.js , creo el servidor e intento conectarme a mi mongodb.

 import express from "express"; import dbo from "./db/conn.js"; const app = express(); app.listen(PORT, async () => { await dbo.connectToDatabase(); log.info(`Server is running on port: ${PORT}`); });

En el archivo conn.js

 const client = new MongoClient(uri); let db: Db; export async function connectToDatabase() { try { await client.connect(); db = client.db(dbName); await db.command({ ping: 1 }); log.info(`Successfully connected to database: ${db.databaseName}.`); } finally { await client.close(); } } export async function getDb() { return db; } export default { connectToDatabase, getDb };

Y ahora en un archivo separado, quiero usar la conexión de la base de datos que creé en el archivo app.js

como esto:

 const collection = getDb().collection(collectionName); // insert documents in collection.

pero cuando intento ejecutar la aplicación, aparece el error TypeError: Cannot read properties of undefined .

Entonces, ¿hay alguna forma de esperar hasta que se establezca la conexión db?

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Hay algunos problemas con su código.

Primero, la función getDb devuelve promesa. Por lo tanto, no puede usar el método de recopilación de inmediato. Elimine la palabra clave async porque la función getDb actual no es una función asíncrona.

 export function getDb() { return db; }

En segundo lugar, en la declaración de prueba y finalmente, el bloque finalmente se ejecuta incondicionalmente, independientemente de si se produce una excepción en el código. Por lo tanto, después de mostrar el registro de éxito de la conexión en connectToDatabase , la conexión se cierra inmediatamente. Para insertar los datos, la conexión debe estar conectada, así que borre el await client.close(); código en bloque finalmente desde connectToDatabase .

Luego puede agregar un documento a la colección sin ningún problema.

about 4 years ago · Juan Pablo Isaza Report

0

Una forma de lograr lo que está tratando de hacer es pasar esa conexión a una clase o función que defina en otro lugar.

Digamos que este es su código de colección (o lo que sea, incluso fuera de una colección que necesita una instancia de conexión de base de datos sin procesar para poder usarla):

 class Collection { constructor(db) { this.db = db //do whatever else needs to be setup } use(name) { //or use it here this.db.use(name) } } export default Collection

Luego, en su archivo principal, algo de código:

 import Collection from './Collection.js' const collection = new Collection(getDb) collection.use('some arbitrary name')

Esta es solo una forma de hacerlo, pero también hay otras formas. Además, si esto es lo único que usa su método getDb() anterior, puede eliminarlo de su principal y ponerlo aquí como administrador.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!