调用 Firebase Pub/Sub 触发器函数但事件为空
Firebase Pub/Sub trigger function is called but event is null
我成功发布到主题:
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'”。我不明白为什么会这样。
PubSub 处理函数接收第一个参数,它是一个 Message 类型的对象。 (你称它为 event
。)根据我链接到的 API 文档,Message 对象有一个名为 json
的 属性,这是已解析的 JSON 来自消息有效负载的数据。
您似乎假设消息中的 data.attributes
包含负载。它没有。使用消息 json
属性 代替:
exports.myfunction = functions.pubsub.topic('my-topic').onPublish(message => {
const payload = message.json
console.log(payload)
const value = payload.value
// continue processing...
});
我成功发布到主题:
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'”。我不明白为什么会这样。
PubSub 处理函数接收第一个参数,它是一个 Message 类型的对象。 (你称它为 event
。)根据我链接到的 API 文档,Message 对象有一个名为 json
的 属性,这是已解析的 JSON 来自消息有效负载的数据。
您似乎假设消息中的 data.attributes
包含负载。它没有。使用消息 json
属性 代替:
exports.myfunction = functions.pubsub.topic('my-topic').onPublish(message => {
const payload = message.json
console.log(payload)
const value = payload.value
// continue processing...
});