我正在尝试从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]: 第一个参数必须是字符串或缓冲区类型之一。接收类型对象
这在官方文档中得到证实:
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 本机流,但情况似乎确实如此。
白衣非少年
跃然一笑
相关分类