我成功发布了一个主题:
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'”。我不明白为什么会这样。
答案 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...
});