【问题标题】:node.js https no response 'end' event, 'close' instead?node.js https 没有响应“结束”事件,而是“关闭”?
【发布时间】:2011-06-30 15:49:01
【问题描述】:

我正在使用 node.js v. 0.4.8。当我创建一个 HTTPS 服务器时,我从来没有收到 response.on('end', ...) 事件(但我是为 HTTP 做的)。我在节点的 github 页面上阅读了问题报告 - https://github.com/joyent/node/issues/728,显然这是一个回归到 0.4.8 的问题。 response.on('close', ...) 似乎有相同的功能,但我对HTTP/HTTPS的了解不够,无法判断。我可以将它用作 response.on('end', ...) 的替代品吗,这可能会在将来引起任何问题吗?

您可以在下面查看代码示例。 提前致谢!

var request = "JSON_request";
var https = require('https');
var options = { 
        host:"someHost.com",
        path:"somePath",
        method: "POST", 
        headers: {
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(request)
        }
    };

var req = https.request(options, function(res){
    var response = "";
    res.setEncoding('utf8');

    res.on('data', function(chunk){
        console.log("INFO: "+chunk);
        response += chunk;
    });

    // This never happens
    res.on('end', function(){
        console.log("End received!");
    });

    // But this does
    res.on('close', function(){
        console.log("Close received!");
    });
});

req.on('error', function(error){
    console.log("Error: "+error);
});

req.write(request);
req.end();

【问题讨论】:

  • 和http一样吗? 'close' 在套接字实际关闭后发出,'end' 在 'http' 请求结束时发出。请求可能有问题,http 解析器认为它没有完整的请求。你能显示完整的请求标头吗?
  • 哇,我在这里遇到了同样的问题。正在查看周围的各种 http 示例,发现当我切换到 https 时,它会永远保持打开状态。但是“关闭”修复了它!答案被接受:)。
  • 啊,谢谢伙计!上帝保佑你..我在这上面花了好几个小时。

标签: node.js https


【解决方案1】:

我相信这个问题已经在commit de09168 得到解决,并且几个月来没有对这个问题采取任何行动,但这里是答案:

关于issue 728 Node.js 创建者 Ryan Dahl says 的 cmets:

这不是错误。不保证响应具有“结束”事件。使用“关闭”。

虽然后来他says

我收回我之前说的话。我们或许应该完成这项工作。

无论哪种方式,closeend 在这个用例中几乎可以互操作。 node.js 核心 tls.js:681 中的相关代码强化了这种解释:

process.nextTick(function() {
  self.encrypted.emit('end');
  self.cleartext.emit('end');
  self.encrypted.emit('close');
  self.cleartext.emit('close');
});

【讨论】:

  • endclose 在节点 v0.12.7 中都没有为我触发。请求“结束”确实会触发。编辑:正如达里奥指出的那样,现在“完成”了。
【解决方案2】:

由于 node.js 0.8.12 finish 事件在 HTTP 响应的结束函数上发出。我在similar question 中写了所有细节。

【讨论】:

    猜你喜欢
    • 2013-05-29
    • 2019-07-26
    • 1970-01-01
    • 2017-03-12
    • 2020-12-30
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    相关资源
    最近更新 更多