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

224
Vistas
Express.js: ejecuta la función en cada solicitud HTTP

Tengo una función unzip() en mi servidor Node.js local que descarga un archivo .json.gz de una URL de AWS CloudFront y lo descomprime en .json , cuando el servidor se ejecuta con node app.js

Las publicaciones de ese archivo json se cargan antes de responder a las rutas:

 app.all('*', function(req, res, next){ fs.readFile('s3posts.json', function(err, data){ res.locals.posts = JSON.parse(data); next(); }); });

El problema es que el archivo se descarga y se descomprime cuando el servidor comienza a ejecutarse, y proporciona los mismos datos al usuario mientras se ejecuta. El archivo no se vuelve a descargar a menos que se reinicie el servidor. Por lo tanto, cualquier cambio en esos datos no se refleja hasta el reinicio.

Intenté llamar a la función unzip() dentro de la ruta app.all() mencionada anteriormente antes de la función fs.readFile() que lee el archivo json, pero arroja un error cuando solicito cualquier página:

 undefined:1 undefined ^ SyntaxError: Unexpected token u in JSON at position 0 at JSON.parse (<anonymous>) at ReadFileContext.callback (/Users/Anish/Workspace/NodeJS/unzipper/app.js:48:27) at FSReqWrap.readFileAfterOpen [as oncomplete] (fs.js:359:13)

Cuando miro en el directorio, veo que descargó el archivo pero no pudo descomprimirlo. Incluso el archivo descargado está corrupto y no se puede descomprimir manualmente.

NOTA: el archivo se descarga, se descomprime y se sirve bien si se coloca fuera de app.all() .

¿Cómo puedo descargar y descomprimir el archivo en cada solicitud del usuario?

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

0

Recomiendo leer sobre middlewares en https://expressjs.com/en/guide/using-middleware.html

app.use(function(request)... debería ayudarlo a manejar todas las solicitudes, independientemente del enrutamiento.

about 4 years ago · Santiago Trujillo Denunciar

0

Pude usar el módulo de solicitud para hacer esto:

 app.all('*', function(req, res, next) { request({ method: 'GET', uri: 'http://post.s3post.cf/s3posts.json.gz', gzip: true }, function(error, response, body) { res.locals.posts = JSON.parse(body); next(); }); });

Esto también eliminó la necesidad de tener una función de unzip() personalizada que descargó y descomprimió el archivo.

about 4 years ago · Santiago Trujillo Denunciar

0

Deberías probar esto,

 app.all('*', function(req, res, next){ fs.readFile('http://post.s3post.cf/s3posts.json.gz', function(err, data){ res.locals.posts = JSON.parse(data); next(); }); });
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