Как мне отменить HTTP-ответ с помощью экспресс-сообщения в середине? В моем случае я обслуживаю данные, созданные из внешнего источника, и до того, как я начал его обслуживать, я знаю размер (длина контента). Однако, если внешний источник перестает подавать мне данные перед подачей полного содержимого, я хочу прервать запрос, чтобы на конце приемника возникло событие ошибки.nodejs: отменить HTTP-ответ во время выполнения
Вот простой код, сервер:
//server
var express = require('express');
var app = express();
app.use(function(req, res, next){
res.setHeader('Content-Length', 100);
res.writeHead(200);
res.write('1234567890');
setTimeout(function() { res.connection.destroy(); }, 500);
});
app.listen(8080);
и
//client
var http = require('http');
http.get('http://localhost:8080/', function(res){
var length = 0;
console.log('expected size: ', res.headers['content-length']);
res.on('data', function(chunk){ length += chunk.length; });
res.on('end', function(){ console.log('received: ', length); });
}).on('error', function(e){
console.log('error', e);
});
Ожидается, что клиент должен показать ошибку, что соединение сброшено и не ведут себя, как все было нормально, хотя только 10 байт из 100.
Как прервать соединение на стороне отправителя, когда известно, что запрос не может быть выполнен? Один из способов, которым я узнал, заключается в том, чтобы исключить исключение из этого таймера, тогда приемник будет регистрировать ошибку, но я не хочу бросать исключение, я хочу сделать это правильно.
Хм. Я думаю, вам придется захватить полные данные из внешнего источника, прежде чем возвращать его с сервера узлов. –
@RobertMoskal не вариант, мне нужно знать, как hot to abort tcp connection. Не могу поверить, что такого метода нет. Мне действительно нужно отменить, никаких обходных решений или других решений. – Pavel