IncomingMessage中止事件



我在节点(4.2.3)中有这个基本的express(4.13.3)服务器。

//blah blah initialization code
app.put('/', function(req, res) {
  req.on('close', function() {
    console.log('closed');
  });
  req.on('end', function() {
    console.log('ended');
  });
  req.on('error', function(err) {
    console.log(err);
  });
  res.send(200);
});

然后我使用cURL模拟文件上传,如下所示:

curl http://localhost:3000/ -X PUT -T file.zip

它开始上传(尽管什么都没发生),当它结束时,事件end就会触发。

当我用Ctrl+C中止上传时,问题就开始了。根本没有事件触发。什么也没发生。

req对象从IncomingMessage继承,从而从ReadableStreamEventEmitter继承。

有什么事件可以捕捉到这样的中止吗?有没有办法知道客户端是否中止了文件上传?

第一次编辑:

用户@AwalGarg提出了req.socket.on('close', function(had_error) {}),但我想知道是否有任何不使用套接字的解决方案?

您的代码设置了一些事件侦听器,然后立即将响应发送回客户端,从而提前完成HTTP请求。

在事件处理程序中移动res.send(),将保持连接打开,直到其中一个事件发生。

app.put('/', function(req, res) {
  req.on('close', function() {
    console.log('closed');
    res.send(200);
  });
  req.on('end', function() {
    console.log('ended');
    res.send(200);
  });
  req.on('error', function(err) {
    console.log(err);
    res.send(200);
  });
});

相关内容

  • 没有找到相关文章

最新更新