Javascript res.end()之后未关闭Resify(节点)连接
我们有一个Node/Restify应用程序,我对此路由有问题(一些代码被省略,因此请忽略缺少的标识符): 问题是,在发送输出后,与客户端的连接没有关闭,即使我调用res.end()!(res只是标准模块的包装)。Javascript res.end()之后未关闭Resify(节点)连接,javascript,node.js,restify,Javascript,Node.js,Restify,我们有一个Node/Restify应用程序,我对此路由有问题(一些代码被省略,因此请忽略缺少的标识符): 问题是,在发送输出后,与客户端的连接没有关闭,即使我调用res.end()!(res只是标准模块的包装)。注释掉return next()没有任何区别。 我可以在控制台上看到“已结束”,我知道内容已发送到客户端,因为如果我强制终止连接(通过简单地终止节点进程),客户端将拥有所有输出 我做错了什么 编辑 取而代之的是,删除内容长度标题可以使其正常工作。为什么呢?(使用该标题的建议是 编辑2 B
注释掉
return next()
没有任何区别。我可以在控制台上看到“已结束”,我知道内容已发送到客户端,因为如果我强制终止连接(通过简单地终止节点进程),客户端将拥有所有输出 我做错了什么 编辑 取而代之的是,删除
内容长度
标题可以使其正常工作。为什么呢?(使用该标题的建议是
编辑2
Buffer.bytellength(result)
的值是4478字节,但客户端(邮递员)下载的数据是4110字节,这可能就是连接未关闭的原因(客户端希望收到更多数据)。这是怎么可能的?连接最有可能通过keep alive
保持活动状态。为什么必须终止连接?这是一个API服务器,我正在和Postman一起测试;没有办法维持生命。必须终止连接,否则客户端仍在等待输出!(邮递员在连接终止之前不会显示结果)
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()
}
})