res.end()后Resolute(Node)连接未关闭

时间:2015-02-05 16:14:11

标签: javascript node.js restify

我们有一个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

的一部分

EDIT2

Buffer.byteLength(result)的值是4478字节,但客户端(邮差)下载的数据是4110,这可能是连接未被关闭的原因(客户端期望收到更多)数据)。怎么可能?

0 个答案:

没有答案