Поток BigQuery для фронтэнда с Express - PullRequest
0 голосов
/ 25 октября 2019

Я пытаюсь прочитать запрос из BigQuery и передать его во внешний интерфейс. В Node.js-land с Express это будет выглядеть так:

app.get('/endpoint', (req, res) => {
  bigQuery.createQueryStream(query).pipe(res);
});

Однако createQueryStream() не создает поток Node.js, вместо этого это пользовательский объект потока, который возвращает строк таблицы и, как таковой, происходит сбой:

(узел: 21236) UnhandledPromiseRejectionWarning: TypeError [ERR_INVALID_ARG_TYPE]: первый аргумент должен быть одним из типа string или Buffer. Полученный объект типа

Это подтверждается в официальной документации :

bigquery.createQueryStream(query)
  .on('data', function(row) {
    // row is a result from your query.
  })

Итак, есть ли способ для потоковой передачи данных BigQuery во внешний интерфейс? Я подумал о двух возможных решениях, но хотел узнать, знает ли кто-нибудь лучший способ:

  • JSON.stringify() строка и возврат JSONL вместо простого JSON. Это добавляет нагрузку на внешний интерфейс для его декодирования, но делает его довольно легким с обеих сторон.
  • Перейдите к REST API и выполните потоковую передачу с запросом , как: request(url, { body: { query, params } }).pipe(res) (или какой-то конкретный API, еще не копали там).

Я был смущен тем, что библиотека Node.js, которая говорит, что она выполняет потоковую передачу, не работает с Node.js собственные потоки, но, похоже, это так.

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