下载返回的空文件

我正在构build一个node.js + express应用程序,用户将在其中input一些数据,使用pdfkit生成PDF并将文件发送给用户。 我能够成功生成文件,问题是,当我下载生成的文件,它是空的。 我甚至无法打开PDF,读者(预览,macOS本地读者)说,该文件是空的。 我使用下面的代码:

var express = require('express'); var router = express.Router(); var guid = require('guid'); var PDFDocument = require('pdfkit'); var fs = require('fs'); /* GET home page. */ router.get('/', function(req, res, next) { res.render('index', { title: 'Express' }); }); router.post('/criar', function(req, res, next) { var filename = guid.raw()+'.pdf'; var doc = new PDFDocument(); doc.pipe(fs.createWriteStream(filename)); doc.font('fonts/UbuntuMono-R.ttf') .fontSize(25) .text('Some text with an embedded font!', 100, 100); doc.end(); res.download(filename, 'rifas.pdf', function(err){ if(!err){ fs.unlink(filename); } }) }); module.exports = router; 

你有什么想法,为什么我的下载文件是空的,而在服务器,他们正在生成?

谢谢!

你真的需要物理文件吗? 如果没有,那么你可以直接stream到客户端:

 var express = require('express'); var router = express.Router(); var PDFDocument = require('pdfkit'); var fs = require('fs'); /* GET home page. */ router.get('/', function(req, res, next) { res.render('index', { title: 'Express' }); }); router.post('/criar', function(req, res, next) { var doc = new PDFDocument(); doc.pipe(res); doc.font('fonts/UbuntuMono-R.ttf') .fontSize(25) .text('Some text with an embedded font!', 100, 100); doc.end(); }); module.exports = router;