Firestore Cloud功能-使用SendGrid在创建时发送电子邮件

时间:2019-03-18 13:04:02

标签: javascript firebase google-cloud-firestore google-cloud-functions sendgrid

我有一个联系表,可以将数据提交到Firestore数据库。我的意图是,一旦集合requests中有另一个条目,Firestore就会通过Cloud Function触发一个函数,该函数包含SendGrid的配置,该函数又应该将此特定条目的数据发送到电子邮件。

我也曾尝试部署此功能,但成功了-但是控制台显示了以下错误,我认为这不是唯一的错误:

  

无法读取未定义的属性'requestId'

const functions = require('firebase-functions');

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

const SENDGRID_API_KEY = functions.config().sendgrid.key;

const sgMail = require('@sendgrid/mail');
sgMail.setApiKey(SENDGRID_API_KEY);

exports.firestoreEmail = functions.firestore
  .document('requests/{requestId}')
  .onCreate(event => {

    const requestId = event.params.requestId;

    const db = admin.firestore();

    return db.collection('requests').doc(requestId)
      .get()
      .then(doc => {

        const requestId = event.params.requestId;

        const request = doc.data();

        const msg = {
          to: 'fuh@gmx.net',
          from: 'hello@angularfirebase.com',

          templateId: 'd-',
          substitutionWrappers: ['{{', '}}'],
          substitutions: {
            name: request.name,
            lastname: request.lastname,
            email: request.email,
            package: request.package,
            date: request.date,
            text: request.text
            // and other custom properties here
          }
        };

        return sgMail.send(msg)
      })
      .then(() => console.log('email sent!') )
      .catch(err => console.log(err) )


  });

编辑:

const functions = require('firebase-functions');

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

const SENDGRID_API_KEY = functions.config().sendgrid.key;

const sgMail = require('@sendgrid/mail');
sgMail.setApiKey(SENDGRID_API_KEY);

exports.request = functions.firestore
  .document('requests/{requestId}')
  .onCreate((snap, context) => {

    const db = admin.firestore();

    return db.collection('requests').doc(requestId)
      .get()
      .then(doc => {

        const requestId = snap.id;

        const request = doc.data();

        const msg = {
          to: 'fuhr@gmx.net',
          from: 'hello@angularfirebase.com',

          templateId: 'd-3cd6b40ad6674f33702107d2',
          substitutionWrappers: ['{{', '}}'],
          substitutions: {
            name: request.name,
            lastname: request.lastname,
            email: request.email,
            package: request.package,
            date: request.date,
            text: request.text
            // and other custom properties here
          }
        };

        return sgMail.send(msg)
      })
      .then(() => console.log('email sent!') )
      .catch(err => console.log(err) )


  });

1 个答案:

答案 0 :(得分:1)

sortable:true方法不会返回.onCreate(),它会返回对象的快照,并从中获取新对象的ID。

因此,您的情况必须是:

event