Есть ли способ узнать, передаются ли данные в экспресс-ответ? - PullRequest
0 голосов
/ 13 декабря 2018

если у меня есть поток Readable, я могу направить его на ответ, подобный этому:

app.use(function(req, res) {
  stream.pipe(res);
});
  1. Если у меня не было этого кода передо мной, ноУ меня был доступ к объекту res, есть ли способ узнать, что в него что-то подается?и зная, когда это закончится?

  2. Я заметил, что я все еще могу использовать res.send() и res.end(), пока что-то передается по каналу, что тогда происходит с ответом?Есть ли правила?

1 Ответ

0 голосов
/ 13 декабря 2018
  1. Существует событие pipe для записываемых потоков:

    Событие 'pipe' генерируется, когда метод stream.pipe ()вызывается в читаемом потоке, добавляя эту запись в набор назначений.

    , поэтому я думаю, что может работать следующее:

-

export async function myHandler(req, res) {
    const reader = getReadableStreamSomehow();

    res.on('pipe', src => {
        console.log('Something is piping into the response');
        assert.equal(src, reader);
    });

    reader.pipe(res);
}

Ссылка: https://nodejs.org/api/stream.html#stream_event_pipe

Не могу точно сказать, но вы, вероятно, столкнетесь с неожиданными побочными эффектами.res.send() в конечном итоге вызывает res.end(), как показано здесь .Поскольку res является потоком, я думаю, что это зависит.У вас может быть несколько элементов, записывающих / отправляющих в res, но A может закончить раньше, чем B, поэтому содержимое B, вероятно, заменит содержимое A, и наоборот.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...