Firebase 到 Bigquery 转换函数错误:无效的 json 响应正文

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

我正在尝试为 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);
});
firebase google-cloud-platform google-bigquery google-cloud-functions firebase-extensions
1个回答
0
投票
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 });
});
© www.soinside.com 2019 - 2024. All rights reserved.