Вызывается функция триггера Firebase Pub / Sub, но событие имеет значение 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);
});

Я стремлюсь обновлять данные в моем хранилище для хранения данных в реальном времени. Функция вызывается, но событие всегда имеет значение NULL, и я получаю сообщение об ошибке «TypeError: Cannot read property« value »of undefined», когда я пытаюсь получить доступ к атрибутам. Я не понимаю, почему это происходит.


person AfroWizzxx    schedule 19.06.2018    source источник
comment
Отредактируйте вопрос, чтобы продемонстрировать, как именно вы отправляете сообщение, полученное этой функцией, и что вы ожидаете от функции в результате. Также убедитесь, что вы следуете документации по триггерам pubsub. То, что вы показываете сейчас, не очень соответствует документации. firebase.google.com/docs/functions/pubsub-events   -  person Doug Stevenson    schedule 20.06.2018
comment
Я отредактировал вопрос, чтобы было понятнее   -  person AfroWizzxx    schedule 20.06.2018


Ответы (1)


Функции обработчика PubSub получают первый аргумент, который является типом Message. объект. (Вы называете это event.) Согласно документам API, с которыми я связался, объект Message имеет свойство с именем json, которое представляет собой проанализированные данные JSON из полезной нагрузки сообщения.

Похоже, вы предполагаете, что 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...
});
person Doug Stevenson    schedule 20.06.2018