"Converting circular structure to JSON" 来自云函数 NodeJs 的 BigQuery Insert



我正试图从NodeJs中编写的Cloud Function将json对象数组加载到BigQuery表中。我收到错误"将循环结构转换为JSON,尽管我没有任何循环引用。我的代码如下。

我有一个函数,我称之为

var num_rows = insertRowsAsStream(data);
res.status(200).send(num_rows);

inserRowsAsStream函数是

async function insertRowsAsStream(data) {
// Inserts the JSON objects into my_dataset:my_table.
// Create a Client
const bigQuery = new BigQuery({projectID: 'myProject'});
const datasetId = 'test_data';
const tableId = 'temp';
const rows = data;
// Insert data into a table
await bigQuery
.dataset(datasetId)
.table(tableId)
.insert(rows);
return rows.length ;
}

传递给insertRowsAsStream的数据arg的格式为。任何地方都没有循环引用。


[ {"name": "John Doe", "age": 30, "title": "Director"}, {"name": "Jane Doe", "age": 27, "title": "Manager"} ]

虽然函数看起来返回rows.length,但实际上它返回的是一个解析为rows.length值的Promise。这是因为insertRowsAsStream被声明为async,并且所有async函数都返回一个Promise。

相反,您应该做的也是awaitinsertRowsAsStream的结果,假设包含函数也是async:

var num_rows = await insertRowsAsStream(data);
res.status(200).send(num_rows);

您可能还想考虑发送号码以外的其他内容。也许是一个调用方可以轻松解析的JSON对象:

res.json({ numRows: num_rows })

这将允许您通过添加新属性来更改响应,而不会破坏现有客户端。

相关内容

  • 没有找到相关文章

最新更新