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

242
Vistas
¿Cómo puedo "almacenar en caché" un resultado de mongoDB/Mongoose para usarlo en mis vistas y rutas de Express.js?

Lo que estoy tratando de lograr es algún tipo de forma de almacenar en caché los resultados de una consulta mongoDB/Mongoose que puedo usar en mis vistas y rutas. Necesitaría poder actualizar este caché cada vez que se agregue un nuevo documento a la colección. No estoy seguro de si esto es posible y si es así, cómo hacerlo, debido a que las funciones son asíncronas.

Esto es lo que tengo actualmente para almacenar las galerías, sin embargo, esto se ejecuta con cada solicitud.

 app.use(function(req, res, next) { Gallery.find(function(err, galleries) { if (err) throw err; res.locals.navGalleries = galleries; next(); }); });

Esto se usa para obtener los nombres de las galerías, que luego se muestran en la barra de navegación desde una galería generada dinámicamente. El modelo de la galería se configura con solo un nombre de la galería y un slug

y esto es parte de mi vista EJS dentro de mi navegación que almacena los valores en un menú desplegable.

 <% navGalleries.forEach(function(gallery) { %> <li> <a href='/media/<%= gallery.slug %>'><%= gallery.name %></a> </li> <% }) %>

Se espera que el sitio web en el que estoy trabajando obtenga cientos de miles de usuarios simultáneos, por lo que no quiero tener que consultar la base de datos para cada solicitud si no es necesario, y simplemente actualizarla cada vez que se crea una nueva galería.

about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Echa un vistazo a cachegoose . Le permitirá almacenar en caché cualquier consulta que desee e invalidar esa entrada de caché cada vez que se cree una nueva galería.

Necesitarás algo como esto:

 const mongoose = require('mongoose'); const cachegoose = require('cachegoose'); cachegoose(mongoose); // You can specify some options here to use Redis instead of in-memory cache app.get(function(req, res, next) { ... Gallery .find() .cache(0, 'GALLERY-CACHE-KEY') .exec(function(err, galleries) { if (err) throw err; res.locals.navGalleries = galleries; next(); }); ... }); app.post(function(req, res, next) { ... new Gallery(req.body).save(function (err) { if (err) throw err; // Invalidate the cache as new data has been added: cachegoose.clearCache('GALLERY-CACHE-KEY'); }); ... });

Aunque podría hacer algo más simple almacenando en caché los resultados manualmente en una variable e invalidando ese caché cuando se agregan nuevas galerías, le aconsejo que eche un vistazo a ese paquete en su lugar.

about 4 years ago · Santiago Trujillo 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