BigQuery流到Express的前端

问题描述 投票:0回答:1

我正在尝试从BigQuery中读取查询并将其流式传输到前端。在带有Express的Node.js-land中,这将是:

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

但是,createQueryStream()不是创建一个Node.js流,它是一个返回表行的自定义流对象,因此失败了:

(node:21236)UnhandledPromiseRejectionWarning:TypeError [ERR_INVALID_ARG_TYPE]:第一个参数必须是字符串或缓冲区类型之一。收到的类型对象

official documentation中确认:

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

因此,有没有一种方法可以将BigQuery数据流式传输到前端?我曾经考虑过两个潜在的解决方案,但想知道是否有人知道更好的方法:

  • JSON.stringify()该行并返回JSONL,而不是普通的JSON。这增加了解码的前端负担,但在两侧都相当容易。
  • 移至REST API并使用request进行实际流式传输,例如:request(url, { body: { query, params } }).pipe(res)(或任何特定的API,尚未在那儿挖)。

[我感到困惑的是,说它可以进行流处理的Node.js库不能与Node.js本机流一起使用,但是似乎是这种情况。

javascript node.js express stream google-bigquery
1个回答
0
投票

BigQuery旨在与为不同编程语言编写的各种不同的客户端库一起使用,因此,它不返回特定于nodejs的数据结构,而是返回大多数结构化编程语言都通用的更通用的结构,例如对象。回答您的问题,是的,有一种方法可以将BigQuery数据流式传输到前端,但这是一个相当个人的选择,因为它所需要的全部就是从一种数据类型转换为另一种数据类型。但是,我想说的最直接的方法是调用您已经提到的JSON.stringify()

我希望有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.