Cómo enviar un archivo pdf desde la aplicación Node / Express al navegador

En mi aplicación Node / Express tengo el siguiente código, que supone leer un documento PDF de un archivo y enviarlo al navegador:

var file = fs.createReadStream('./public/modules/datacollectors/output.pdf', 'binary'); var stat = fs.statSync('./public/modules/datacollectors/output.pdf'); res.setHeader('Content-Length', stat.size); res.setHeader('Content-Type', 'application/pdf'); res.setHeader('Content-Disposition', 'attachment; filename=quote.pdf'); res.pipe(file, 'binary'); res.end(); 

No recibo ningún error, pero tampoco obtengo el archivo en mi navegador. ¿Qué estoy haciendo mal?

Tienes que pasar de la secuencia de lectura a la secuencia de escritura, no al revés:

 var file = fs.createReadStream('./public/modules/datacollectors/output.pdf'); var stat = fs.statSync('./public/modules/datacollectors/output.pdf'); res.setHeader('Content-Length', stat.size); res.setHeader('Content-Type', 'application/pdf'); res.setHeader('Content-Disposition', 'attachment; filename=quote.pdf'); file.pipe(res); 

También está configurando la encoding de manera incorrecta, pase un objeto con encoding si es necesario.

Creo que encontré su respuesta en otra publicación Mostrar archivo PDF en el navegador de iones usando el nodo js .

Después de probar su código en Chrome, inmediatamente inicia la descarga del archivo PDF. Pero si desea mostrar el contenido del archivo PDF, intente a continuación:

 var data =fs.readFileSync('./public/modules/datacollectors/output.pdf'); res.contentType("application/pdf"); res.send(data); 

Esto debería enviar directamente el contenido PDF al navegador.

Espero que esto responda a su pregunta.

La mejor manera de descargar un PDF en la API de REST.

 var path = require('path'); var file = path.join(__dirname, 'file.pdf'); res.download(file, function (err) { if (err) { console.log("Error"); console.log(err); } else { console.log("Success"); } });