Firebase功能未被触发。与sendgrid集成

时间:2018-03-09 07:04:16

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

我正在编写一个firebase函数,如下所示。问题是我在添加新用户时没有被触发。请告诉我我在哪里做错了。 以下功能的例外情况是,只要条目转到/user文档,电子邮件就会转到用户电子邮件。基本上它是一个signUp页面,为了成功注册,我想发送电子邮件。

import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';
import * as sendgrid from '@sendgrid/mail';


admin.initializeApp(functions.config().firebase);
// const SENDGRID_API_KEY = functions.config().sendgrid.key;
const SENDGRID_API_KEY = 'SG.xxxxCfXA46A.6i-lhxxxxxxxxxxx0';
// const sendgrid = require('@sendgrid/mail');

sendgrid.setApiKey(SENDGRID_API_KEY);



exports.userCreateEmail = functions.database.ref('/users/{userId}').onCreate((event) => {
    const userId = event.params.userId;
    console.info('userId '+userId);
    const db = admin.firestore();
    return db.collection('users').doc(userId).get().then(doc => {
        const user = doc.data();
        console.log(user);
        const msg = {
            to: user.email,
            from: 'asdf@gmail.com',
            subject: 'new follower',
            templateId: 'b98f5d37-8371-4c24-850c-sdfasdf'
        };
        return sendgrid.send(msg);
    }).then(() => console.log('email sent!'))
        .catch(err => console.log(err))
});

1 个答案:

答案 0 :(得分:0)

如果使用firebase:

改变这个:

exports.userCreateEmail = functions.database.ref(`/users`).onCreate((event) => {

到此:

exports.userCreateEmail = functions.database.ref('/users/{userId}').onCreate((event) => {

也可以使用'代替`

同样event.params将检索通配符的值,因此您必须将{//anyname}添加为外卡,然后您才能检索它。

还使用val()代替data()

检索数据

如果您使用的是firestore,则需要使用:

exports.userCreateEmail = functions.firestore.document('users/{userId}').onCreate((event) => {