Express 服务器发送空 PDF 文件

Express server send empty PDF file

我有一个发送 pdf 文件的路由:

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

我尝试使用其他解决方案来做或多或少相同的事情:

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

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

我的问题是,当我在浏览器中询问这条路线时,我收到了一个空的 pdf 文件,其页数与原始文件相同。

我用 app.use(express.bodyParser()); 配置了我的快速服务器。

谁能帮帮我?

我在使用 connect-livereload 中间件时看到过这个。问题是 connect-livereload 将 js 代码片段注入到 pdf 数据流中。它还可能导致其他非 html 数据出现问题。好消息是这只会在开发过程中引起问题(你不应该在生产中加载这个中间件。)

最近已修复此问题,但许多模板包含旧版本,因此请检查您的 package.json 文件并在必要时获取最新版本。最新的 connect-livereload 版本是 0.5.3.

如果例如ignore: ['.pdf'] 行不起作用,可能是因为您没有查询具有相关后缀的资源。

例如如果您查询具有 id 的资源:

localhost:9000/api/export/getExport?destinationId=56179bb36bc51bb00836c3ed

您无法过滤文件后缀。你可以做的是通过路径过滤:

app.use( require( 'connect-livereload' )( {
  ignore: [ /api\/export\/getExport.*/ ]
} ) );

connect-livereload 查看其他可能的选项。