Node.js Express.js中res.download的文件发生了什么变化?

Node.js Express.js中res.download的文件发生了什么变化?,node.js,pdf,express,Node.js,Pdf,Express,我正在开发一个应用程序,它在服务器上创建一个PDF文档,然后显示一个下载按钮。当我单击该按钮时,该过程似乎有效。当我检查Chrome控制台中的“网络>预览”和“网络>标题”选项卡时,我可以看到文件肯定已返回 问题是,它不显示,也不提供保存选项。我是否错过了客户端步骤?我的首选结果是要么给用户保存文件的选项,要么自动开始下载到他们的默认路径 以下是相关的服务器代码: exports.show = function(req, res) { var file = req.params.id; va

我正在开发一个应用程序,它在服务器上创建一个PDF文档,然后显示一个
下载按钮。当我单击该按钮时,该过程似乎有效。当我检查Chrome控制台中的“网络>预览”和“网络>标题”选项卡时,我可以看到文件肯定已返回

问题是,它不显示,也不提供保存选项。我是否错过了客户端步骤?我的首选结果是要么给用户保存文件的选项,要么自动开始下载到他们的默认路径

以下是相关的服务器代码:

exports.show = function(req, res) {
 var file = req.params.id;
 var filePath = __dirname + '../../../lib/completedforms/';
 var thisPath = path.resolve(filePath + file);
 res.attachment(thisPath);
 res.setHeader('Content-Type', 'application/pdf');
 res.setHeader("Content-Disposition", "attachment");
 res.download(thisPath);
};

提前感谢您的指导。

无需同时使用
res.attachment()
res.download()
。就用后者吧

另外,
res.download()
已经设置了
Content Disposition
标题,因此您也可以删除该标题

您还可以简化路径生成:

var thisPath = path.resolve(__dirname, '../../../lib/completedforms/', file);

尽管您可能应该清理
文件
和/或检查
此路径
不是不应该在的位置。这将防止有人提供潜在恶意的
req.params.id
值,如
。/../../../../../../../../../etc/passwd

谢谢mscdex,该代码现在干净多了。我仍然没有得到下载的提示。我认为这就是
res.download()
方法的全部要点。我可以将返回值写入页面,它肯定是经过编码的PDF文件。我以为浏览器会识别格式,但显然不是这样。@mscdex@espressoAndCode我也在试图让浏览器提示下载。在我的例子中,
res.download()
正在成功下载文件,但它正在下载到我默认的任何目录,并立即打开文件。有没有办法避免打开文件?