Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Express server send empty PDF file

I have a route that sends a pdf file:

app.get('/teste',function(req,res,next){
    res.setHeader('content-type','application/pdf');
    res.download(app.get('appPath')+'/teste.pdf');
}

I tried use another solutions that do more or less the same thing:

app.get('/teste',function(req,res,next){
    res.setHeader('content-type','application/pdf');
    fs.createReadStream(app.get('appPath')+'/teste.pdf').pipe(res);
 }

and

app.get('/teste',function(req,res,next){
        res.setHeader('content-type','application/pdf');
        res.sendfile(app.get('appPath')+'/teste.pdf');
}

My problem is when I ask this route in browser and I receive an empty pdf file with the same number of pages that the original file.

I configured my express server with app.use(express.bodyParser());.

Anyone can help me?

like image 415
fabioDMFerreira Avatar asked Feb 09 '15 15:02

fabioDMFerreira


1 Answers

I've seen this when using connect-livereload middleware. The problem is that connect-livereload is injecting a js code snippet into the pdf data stream. It can also cause problems with other non-html data. The good news is that this should only cause problems during development (you shouldn't be loading this middleware in production.)

This was recently fixed but a lot of templates include an older version so check your package.json file and get the latest version if necessary. The most recent connect-livereload version is 0.5.3.

like image 134
Wrecks Avatar answered Oct 14 '22 21:10

Wrecks