我正在尝试为 Firestore 到 BigQuery Stream 扩展实现转换函数,但出现此错误:
未处理的错误 FetchError:无效的 json 响应正文 https://us-east4-
.cloudfunctions.net/ 原因:意外的令牌 < in JSON at position 1
这是代码:
const functions = require('@google-cloud/functions-framework');
functions.http('eventsTransformFunction', (req, res) => {
const inputPayload = req.body;
const inputData = inputPayload.data[0];
const outputPayload = [{
insertId: inputData.insertId,
json: {
timestamp: inputData.json.timestamp,
event_id: inputData.json.event_id,
document_name: inputData.json.document_name,
document_id: inputData.json.document_id,
operation: inputData.json.operation,
data: JSON.stringify({ createdAt: { _seconds: 1664983515, _nanoseconds: 745000000 }, name: "Transformed Name" })
},
}]
res.send({ data: outputPayload });
});
我什至尝试过这个,但仍然遇到同样的错误:
const functions = require('@google-cloud/functions-framework');
functions.http('eventsTransformFunction', (req, res) => {
res.send(req.body).status(200);
});
const functions = require('@google-cloud/functions-framework');
functions.http('eventsTransformFunction', (req, res) => {})
是为 Functions Framework for Node.js 编写 Cloud Functions 的方式,而不是为 Cloud Functions for Firebase 编写的方式。
您应该遵循 Firebase 文档的 Cloud Functions 部分。
因此,例如,通过使用 Cloud Functions 第二代,您的代码应如下所示:
const {
onRequest,
} = require("firebase-functions/v2/https");
exports.eventsTransformFunction = onRequest(async (req, res) => {
const inputPayload = req.body;
const inputData = inputPayload.data[0];
const outputPayload = [
{
insertId: inputData.insertId,
json: {
timestamp: inputData.json.timestamp,
event_id: inputData.json.event_id,
document_name: inputData.json.document_name,
document_id: inputData.json.document_id,
operation: inputData.json.operation,
data: JSON.stringify({
createdAt: { _seconds: 1664983515, _nanoseconds: 745000000 },
name: "Transformed Name",
}),
},
},
];
res.send({ data: outputPayload });
});