【问题标题】:Cloud Function is failing to write to the Map data type in Cloud FirestoreCloud Function 无法写入 Cloud Firestore 中的 Map 数据类型
【发布时间】:2021-11-26 21:25:59
【问题描述】:

我有一个将 JSON 发布到我的云函数触发器 URL 的 Webhook。

我希望 Cloud Function 解析 JSON 并将其写入我的 Cloud Firestore。

我已经在 webhook.site 和 requestbin.com 上测试了 Webhook:他们都完美地接收了 POST 请求。

另外,这不是一个经过身份验证的请求,我通过 Google Cloud Platform - Cloud Function Console 部署了该功能。我没有通过 CLI 或通过使用 firebase 的应用程序设置来部署它。

此函数确实需要 HTTPS。

我能够让我的函数写入 Firestore,但它没有写入地图中的字段 - 我在底部添加了屏幕截图,以显示我的 Firestore 在 Firebase / Google Cloud Platform 中的样子控制台。

我需要提供什么语法来确保我的 Cloud Function 采用 JSON 并写入 Firestore,同时尊重 Map 数据类型?

我需要声明 people_Email = map 吗?如果我这样做了,那将如何实现?

index.js

const admin = require('firebase-admin')
admin.initializeApp();

exports.wooCommerceWebhook = async (req, res) => {
    const payload = req.body;

    var billing = ""; // Do I even need to declare every nest of the complex JSON?
        var people_EmailHome = "";
        var people_FirstName = "";
        var people_LastName = "";

    // Write to Firestore - People Collection
    await admin.firestore().collection("people").doc().set({
        people_EmailHome: payload.billing.email,
        people_FirstName: payload.billing.first_name,
        people_LastName: payload.billing.last_name,
    });

    return res.status(200).end();

};

package.json

{
  "name": "sample-http",
  "version": "0.0.1",
  "dependencies": {
      "firebase-admin": "^9.4.2"
  }
}

将 POST JSON 传送到我的云函数 URL 的 Webhook:

{
     "billing": {
          "email": "test@test.com",
          "first_name": "First",
          "last_name": "Last"
     }
}

我的 Cloud Firestore 的屏幕截图

【问题讨论】:

  • 您能否分享 Firestore 中有效负载和预期结构的屏幕截图?
  • 我的有效负载应该是 JSON,我已经发布了。 {"billing": { "email": "test@test.com", "first_name": "First", "last_name": "Last" } } 并且预期的结构是 collection("people").doc() 此外,您应该在底部看到屏幕截图,其中我显示 people_Email 是带有 people_EmailHome 字符串的地图

标签: node.js firebase express google-cloud-firestore google-cloud-functions


【解决方案1】:

我需要提供什么语法来确保我的云函数采用 JSON 并在尊重地图数据的同时写入 Firestore 输入?

以下方法可以解决问题:

const admin = require('firebase-admin')
admin.initializeApp();

exports.wooCommerceWebhook = async (req, res) => {
    const payload = req.body;

    await admin.firestore().collection("people").doc().set({
       people_Email: { people_EmailHome: payload.billing.email },
       people_Names: { people_FirstName: payload.billing.first_name, people_LastName: payload.billing.last_name }
    });

    return res.status(200).end();

};

【讨论】:

  • 我是否需要声明如下变量:var people_EmailHome = ""; 以告诉 Firestore 这是一个字符串?在开始声明数据类型之前,我遇到了未定义的有效负载错误。
  • 不,您不必这样做,它被视为键/值对的键。
猜你喜欢
  • 2021-11-17
  • 2021-11-25
  • 2021-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-01
  • 1970-01-01
  • 2019-02-14
相关资源
最近更新 更多