Я только начинаю использовать mongodb stream functionality для потоковой передачи данных непосредственно на express response.Обращение с ошибкой mongodb при потоковой передаче непосредственно для выражения ответа
Для этого я использую кусок кода, который находится на this question:
cursor.stream().pipe(JSONStream.stringify()).pipe(res);
Я хочу отметить реакцию с 500 статусом, когда курсор возвращается MongoError. К сожалению, с этим кодом ошибка возвращается в JSON со статусом 200.
Как я могу справиться с этим с помощью простых решений? Должен ли я обрабатывать это в случае ошибки курсора? Если да, то как я могу сказать, чтобы не передавать напрямую, чтобы выразить ответ, если произошла ошибка?
EDIT
Я попытался решение с обработкой события ошибки в потоке, как это:
var stream = cursor.stream();
stream.on('error', function(err){
res.status(500).send(err.message);
});
stream.pipe(JSONStream.stringify()).pipe(res);
К сожалению, когда произошла ошибка, я получил Error: write after end
от потому что я уже отправил ответ в случае ошибки.
Как я могу выразить ответ с сообщением об ошибке при исчезновении потока курсора ПОСЛЕ того, как я передал его в ответ?
Хм .. Связанная документация говорит: «Одно важное предостережение в том, что если читаемый поток выдает ошибку во время обработки, назначения Writable не закрыт автоматически. Если возникает ошибка, необходимо будет вручную закрыть каждый поток, чтобы предотвратить утечку памяти. ". Таким образом, кажется, что поток записи не заканчивается ошибкой чтения потока. – ronkot