Firebase发布/订阅触发器函数被调用,但事件为null

时间:2018-06-19 23:18:23

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

我成功发布了一个主题:

gcloud pubsub topics publish my-topic --message '{"value":"data"}' --attribute value=myValue

,并且可以使用gcloud命令成功查看条目:

gcloud beta pubsub subscriptions pull --auto-ack my-subcription

然后我创建了一个firebase pubsub onPublish触发函数,如下所示:

exports.myfunction = functions.pubsub.topic('my-topic').onPublish(event => {

     const attributes = event.data.attributes;
     const message = event.data.json;

     const value= attributes['value'];
     const data = {
         key: value,
         key2: message.value
     };

     let ref= db.collection('devices').doc(value);

     return updateTheDataInMyFirestore(ref, data);
});

我的目的是更新Firestore中的数据以维护实时数据。调用该函数,但事件始终为null,并且在尝试访问属性时出现错误“ TypeError:无法读取未定义的属性'value'”。我不明白为什么会这样。

1 个答案:

答案 0 :(得分:0)

PubSub处理程序函数接收一个第一个参数,该参数是Message类型的对象。 (您将其称为event。)根据我链接到的API文档,Message对象具有一个名为json的属性,该属性是从消息有效负载中解析的JSON数据。 / p>

您似乎在假设消息中的data.attributes包含有效负载。没有。改用Message json属性:

exports.myfunction = functions.pubsub.topic('my-topic').onPublish(message => {
    const payload = message.json
    console.log(payload)

    const value = payload.value

    // continue processing...
});