如何提前关闭http.ServerResponse?

时间:2015-04-18 10:22:22

标签: node.js http

当我在我的http服务器发送一个我在Node.js中写入的分块响应时,发生错误。此时无法向客户端发送错误消息,我认为this answer在这种情况下该怎么做是正确的:

  

您所能做的只是关闭连接。客户端没有收到所有标头,或者在响应结束时没有收到终止0长度的块。无论哪种方式都足以让客户端知道服务器在发送过程中遇到错误。

所以问题是,如何在我的http.ServerResponse对象上执行此操作?我无法调用end,因为客户端会认为一切顺利,并且没有close方法。有一个'close'事件,但我觉得这是我应该在这种情况下听的东西,而不是让自己发泄,对吗?

1 个答案:

答案 0 :(得分:0)

我是按照以下方式做的:

function respDestroy()
{
    this._socket.destroy();
}

function respReply(message, close)
{
    if (!close)
        this.end(message);
    else
        this.end(message, function(){ this.destroy(); });
}

server.on('request', 
    function(req, resp)
    {
        resp._socket = resp.socket; // `socket` field is nulled after each `end()`
        resp.destroy = respDestroy;
        resp.reply = respReply;
        ...
    });

您可以修改respReply以接受状态代码和状态消息。