Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

319
Visualizações
Express y MongoDB sin Mongoose

Esto no es tanto una pregunta, sino más bien una solicitud de consulta. No pude encontrar recursos para verificar la validez de mi método, por lo que me gustaría escuchar la opinión de los expertos de MongoDB.

Estaba jugando con MongoDB y se me ocurrió este método de middleware para pasar el cliente a mis rutas. Tengo este middleware Express:

 const addClientToRequest = async (req, _, next) => { const client = new MongoClient(uri); await client.connect(); req.client = client; next(); }; app.use(addClientToRequest);

Después de eso, uso req.client en mis rutas para acceder a mi base de datos.

 app.get("/:id", async (req, res) => { const client = req.client; const id = req.params.id; try { const data = await client.db("mydb").collection("mycollection").findOne({ id }); if (data) return res.status(200).json(data); } catch (error) { return res .status(500) .json({ message: "Error fetching requested data", error }); } return res.status(404).json({ message: "Requested data cannot be found" }); });

¿Cuál sería un problema en este enfoque? ¿Está bien usar el cliente MongoDB de esta manera?

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

En mi experiencia, siempre hemos definido una utilidad separada para cargar un grupo de conexiones al inicio de la aplicación y luego reutilizamos esas conexiones.

En el enfoque anterior, parece que está creando una nueva conexión para cada solicitud HTTP que se realiza y luego no termina (o) cierra la conexión. Esto puede ser costoso para una aplicación grande.

db.util.js

 const { MongoClient } = require("mongodb"); const uri = `mongodb://${process.env.DB_USER}:${process.env.DB_PASSWORD}@localhost:27017/${process.env.DATABASE}?maxPoolSize=2-&w=majority`; const client = new MongoClient(uri); const init = async () => { try { await client.connect(); console.log("Connected"); } catch (error) { console.log(error); } }; const getClient = () => { return client; }; module.exports.init = init; module.exports.getClient = getClient;

aplicación.js

 //Import modules require("dotenv").config({ path: __dirname + "/.env" }); const express = require("express"); const dogRoutes = require("./routes/dog.routes"); const db = require("./utils/db.util"); // Define PORT for HTTP Server const PORT = 9900; // Initialize Express const app = express(); app.use(express.json()); app.use(dogRoutes); (async () => { await db.init(); app.listen(PORT, (err) => { console.log(`Server is up at localhost ${PORT}`); }); })();
over 4 years ago · Santiago Trujillo Relatório

0

Creo que lo que podría hacer es colocar al cliente fuera del middleware, para que no lo vuelva a definir y vuelva a conectarse cada vez que se realiza una solicitud. Para hacerlo, simplemente defínalo y conéctese antes que el middleware, y en el middleware, configure el cliente como req.mongoClient o como quiera llamarlo.

 const client = new MongoClient(uri); await client.connect(); // if this is outside of an async function, either use an async function like (async () => {..script..})(), either define a variable isClientReady and set it on true after the promise resolved. const addClientToRequest = (req, _, next) => { req.client = client; next(); }; app.use(addClientToRequest);
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda