IncomingMessage中止事件

Are*_*ski 6 javascript stream node.js express

我在Node(4.2.3)中有这个基本快速(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);
});
Run Code Online (Sandbox Code Playgroud)

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

curl http://localhost:3000/ -X PUT -T file.zip
Run Code Online (Sandbox Code Playgroud)

它开始上传(尽管它没有任何反应),当它结束时,事件就会end触发.

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

req对象继承自IncomingMessage,继承自Readable,StreamEventEmitter.

是否有任何事件可以捕获这样的中止?有没有办法知道客户端是否中止文件上传?

首先编辑:

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

Noc*_*rno 2

您的代码设置一些事件侦听器,然后立即将响应发送回客户端,从而提前完成 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);
  });

});
Run Code Online (Sandbox Code Playgroud)