我在节点(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
继承,从而从Readable
、Stream
和EventEmitter
继承。
有什么事件可以捕捉到这样的中止吗?有没有办法知道客户端是否中止了文件上传?
第一次编辑:
用户@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);
});
});