Запрос Axios с потоком отклика от узла - PullRequest
0 голосов
/ 20 ноября 2019

У меня есть клиентское приложение в React и сервер в Node (с Express). На стороне сервера у меня есть конечная точка, подобная следующей (это не настоящая конечная точка, просто представление о том, что я делаю):

function endpoint(req, res) {
   res.writeHead(200, {
        'Content-Type': 'text/plain',
        'Transfer-Encoding': 'chunked'
      });

   for(x < 1000){
      res.write(some_string + '\n');
      wait(a_couple_of_seconds); // just to make process slower for testing purposes
   }

   res.end();
}

Это прекрасно работает, я имею в виду, когда я называю этоконечная точка, я получаю весь поток со всеми 1000 строк.

Дело в том, что мне не удается получить эти данные по частям (для каждой «записи» или группы «записей»), чтобы показатьчто на внешнем интерфейсе, как только я их получаю .. (подумайте о таблице, которая показывает строки, как только я получу их от вызова конечной точки)

Во внешнем интерфейсе я использую Axios для вызоваAPI со следующим кодом:

async function getDataFromStream(_data): Promise<any> {
    const { data, headers } = await Axios({
        url: `http://the.api.url/endpoint`,
        method: 'GET',
        responseType: 'stream',
        timeout: 0,
    });

    // this next line doesn't work. it says that 'on' is not a function
    data.on('data', chunk => console.log('chunk', chunk)); 
    // data has actually the whole response data (all the rows)

    return Promise.resolve();
}

Дело в том, что вызов Axios возвращает весь объект данных после вызова res.end () на сервере, но мне нужно получить данные каккак только сервер начнет отправлять чанки со строками (на каждом res.write или всякий раз, когда сервер считает, что готов отправить какую-то кучу чанков).

Я также пытался не использоватьждать и получить значение обещания на'then ()' для вызова axios, но это то же самое поведение, значение 'data' приходит со всеми «записями» вместе, как только сервер выполняет res.end () '

Итак, что я здесь делаю не так? может быть, это невозможно с Axios или Node, и я должен использовать что-то вроде websockets для решения этой проблемы. Любая помощь будет очень признательна, потому что я много читаю, но пока не могу найти рабочее решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...