Как отправлять электронные письма, проходящие через массивы из базы данных firestore - PullRequest
1 голос
/ 22 октября 2019

Я пытаюсь отправить квитанцию ​​пользователя из интернет-магазина. Как перебрать данные для отправки

Я пытался использовать [] для динамических данных.

import * as functions from "firebase-functions";
import * as admin from "firebase-admin";
admin.initializeApp();
const db = admin.firestore();

// Sendgrid Config
import * as sgMail from "@sendgrid/mail";

const API_KEY = functions.config().sendgrid.key;
const TEMPLATE_ID = functions.config().sendgrid.template;
sgMail.setApiKey(API_KEY);

//FUNCTIONS

export const newOrder = functions.firestore
.document("checkout/{checkoutId}/products/{productId}")
.onCreate(async (change, context) => {
// Read booking document
const postSnap = await db
  .collection("checkout/{checkoutId}/products")
  .doc(context.params.productId)
  .get();

const booking = postSnap.data() || {};

//Email
const msg = {
  to: "wilmutsami@gmail.com",
  from: "test@example.com",
  templateId: TEMPLATE_ID,
  dynamic_template_data: {
    subject: "Hey there, thank you for your order!",
    name: booking.name,
    amount: booking.amount
    }
  };

 //Send it
 return sgMail.send(msg);
});

Ожидаемые результаты: электронное письмо пользователю отображает таблицу элементов, которые вызаказал

1 Ответ

0 голосов
/ 22 октября 2019

Если вы хотите получить данные документа, который запустил облачную функцию на checkout/{checkoutId}/products/{productId}, вам не нужно делать

await db
  .collection("checkout/{checkoutId}/products")
  .doc(context.params.productId)
  .get();

Как объяснено в doc :

Когда функция запускается, предоставляет снимок данных, связанных с событием . Вы можете использовать этот снимок для чтения или записи в документ, вызвавший событие, или использовать Firebase Admin SDK для доступа к другим частям вашей базы данных.

Вы можете легко получить значения документаполя через snap DocumentSnapshot следующим образом:

export const newOrder = functions.firestore
.document("checkout/{checkoutId}/products/{productId}")
.onCreate(async (snap, context) => {

      const docData = snap.data();
      const name = docData.name;
      const amount = docData.amount;

      // You can then use those values in the rest of your code

    const msg = {
      to: "wilmutsami@gmail.com",
      from: "test@example.com",
      templateId: TEMPLATE_ID,
      dynamic_template_data: {
        subject: "Hey there, thank you for your order!",
        name: name,
        amount: amount
        }
      };

    return sgMail.send(msg);

});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...