Вы не можете получить значение узла базы данных, выполнив
let token = root.child('/users/' + uname + '/token').ref.token;
Вам необходимо запросить базу данных с помощью once()
метода Reference
, который является асинхронным.
Это означает, что вы должны изменить свой код следующим образом:
exports.sendNotification = functions.database.ref('/messages/diyetisyen/{uname}/{msgid}/message')
.onCreate((snapshot, context) => {
let message = snapshot.val();
let uname = context.params.uname;
let root = snapshot.ref.root;
let tokenRef = root.child('/users/' + uname + '/token').ref;
let payload = {
data: {
custom_notification: JSON.stringify({
body: message + '',
title: 'aaaa'
})
}
};
let options = { priority: "high" };
return tokenRef.once('value')
.then(dataSnapshot => {
const data = dataSnapshot.val();
const token = data.token; //Here I make the assumption the token is at '/users/' + uname + '/token/token'. You may adapt it as required
return admin
.messaging()
.sendToDevice(token, payload, options);
});
});