我们有一个Node / Restify应用程序,我对这条路线有问题(某些代码已被省略,所以请忽略缺少的标识符):
server.post('/report', requireAuth, function (req, res, next) {
generateReport(err, result, extension, contentType) {
// Filename for the report
var filename = 'Report_' + moment().format('YYYY-MM-DD_HH:mm:ss')
// Output the result directly with a lower-level APIs
res.writeHead(200, {
'Content-Length': Buffer.byteLength(result),
'Content-Type': contentType,
'Content-Disposition': 'attachment;filename='+filename+'.'+extension
})
res.write(result, 'utf8')
res.end()
console.log('ended')
return next()
}
})
问题在于,在发送输出后,即使我调用res.end(),与客户端的连接也没有关闭! (res只是标准HTTP ServerResponse模块的封装)。
评论return next()
并没有任何区别。
我可以在控制台上看到'结束'我知道内容被发送到客户端,因为如果我强制终止连接(通过简单地终止节点进程),客户端就有了所有的输出。
我做错了什么?
相反,删除Content-Length
标题可使其正常工作。这是为什么? (使用该标题的建议是documentation)
Buffer.byteLength(result)
的值是4478字节,但客户端(邮差)下载的数据是4110,这可能是连接未被关闭的原因(客户端期望收到更多)数据)。怎么可能?