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

221
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 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