Облачная функция не может выполнить запись в тип данных карты в Cloud Firestore

# #node.js #firebase #express #google-cloud-firestore #google-cloud-functions

Вопрос:

У меня есть веб-крючок, который отправляет JSON на URL-адрес триггера моей облачной функции.

Я хочу, чтобы облачная функция проанализировала JSON и записала его в мой облачный магазин Firestore.

Я протестировал веб-крючок на веб-крючке.сайт amp; requestbin.com : они оба отлично получают запрос на отправку.

Кроме того, это не аутентифицированный запрос, и я развернул функцию через облачную платформу Google — Консоль облачных функций. Я не развертывал это через интерфейс командной строки или через настройку приложения с помощью firebase.

Для этой функции действительно требуется HTTPS.

Я смог заставить свою функцию записывать в Firestore, но она не записывала поля на карте — я включил скриншоты внизу, чтобы показать, как выглядит мой Firestore в консоли Firebase / Google Cloud Platform.

Какой синтаксис мне нужно предоставить, чтобы убедиться, что моя облачная функция принимает JSON и записывает в Firestore, соблюдая тип данных карты?

Нужно ли мне объявлять people_Email = карта? и если я это сделаю, как это будет достигнуто?

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();

};
 

пакет.json

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

Мой веб-крючок, который отправляет сообщение JSON на URL-адрес моей облачной функции:

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

Скриншоты моего облачного магазина Firestore
введите описание изображения здесь

введите описание изображения здесь

Комментарии:

1. Можете ли вы поделиться скриншотом полезной нагрузки, а также ожидаемой структуры в Firestore ?

2. моя полезная нагрузка должна быть JSON, я опубликовал. {"billing": { "email": "test@test.com", "first_name": "First", "last_name": "Last" } } и ожидаемая структура-коллекция(«люди»).doc() Кроме того, вы должны увидеть скриншоты внизу, где я показываю, что people_Email-это карта со строкой people_EmailHome

Ответ №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();

};
 

Комментарии:

1. Нужно ли мне объявлять переменные, такие как: var people_EmailHome = ""; чтобы сообщить Firestore, что это строка? Я получал неопределенные ошибки полезной нагрузки до того, как начал объявлять типы данных.

2. Нет, вам это не нужно, он рассматривается как ключ пары ключ/значение.