Express从移动设备下载后,无法设置标题

我有相当简单的路线定义:

router.get('/download', function(req, res){ var file = __dirname + 'file.ext'; res.download(file); }); 

它正常工作,当我从我的比赛请求,但一旦我从智能手机,服务器崩溃,我得到以下错误:

 throw new Error('Can\'t set headers after they are sent.'); Error: Can't set headers after they are sent. at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:335:11) ... at FSReqWrap.oncomplete (fs.js:95:15) 

但是,如果我快速转过服务器,智能手机将无故障下载(从以前的会话)。

我在做什么错了?

当浏览器通过GET请求服务器请求时,会在头信息中发送ACCEPT语句。 请参阅https://developer.mozilla.org/en-US/docs/Web/HTTP/Content_negotiation#The_Accept.3A_header

所以,我想你的浏览器发出请求,并告诉服务器(在其标题)“我可以接受graphics文件,video文件,HTML文件,文本文件,虾文件* …各种文件”。 而你的手机发出相同的请求,但发送一个它可以接受的短的MIMEtypes列表。 也许你正试图把PDF文件返回给你的手机,并没有说它可以接受这种types,因为它没有Adobe Reader应用程序。

因此,如果Express检测到客户端无法接受PDF文件,并尝试下载PDF文件,则会设置标题返回码。 然后Express的另一部分尝试再次设置它。 如果是我,我想我会升级我的Express版本,看看它不再有这个错误。

*布巴·甘普幽默