В вашем коде есть два места, которые вы должны исправить:
Во-первых , поскольку кажется, что вы используете старую версию Firebase SDK для облачных функций (т. Е. https://firebase.google.com/docs/functions/beta-v1-diff#realtime-database), вы получите данные, которые были только что добавлены в базу данных, используя val()
метод DataSnapshot
(data.data
в вашем случае), следующим образом:
exports.sendDatas = functions.database.ref('/datiFatt/{pushId}').onCreate((data) => {
const name = data.data.val().name;
const pec = data.data.val().pec
const id = data.data.val().id;
....
});
Обратите внимание, что было бы более понятным назвать параметр функции обратного вызова как event
вместо data
и изменить код следующим образом:
exports.sendDatas = functions.database.ref('/datiFatt/{pushId}').onCreate((event) => {
const name = event.data.val().name;
....
});
Тем не менее, я бы посоветовал вам выполнить обновление до последней версии SDK и, следовательно, использовать последний синтаксис (....onCreate((snap, context) => {const name = snap.val().name; ....});
см. doc , упомянутый выше).
Во-вторых, для облачных функций, запускаемых событиями в базе данных реального времени (как и другие фоновые функции), вы должны вернуть Promise, чтобы указать платформе, когда функция будет завершена (или сгенерировала ошибку). Поэтому вам следует изменить свою функцию какследует:
function sendEmail(name, pec, id) {
const mailOptions = {
from: `${gmailEmail}`,
to: test
};
mailOptions.subject = `Data from ${name}!`;
mailOptions.html = `${name} \n ${pec} \n ${id} `;
return mailTransport.sendMail(mailOptions);
});
}