触发云功能时的"TypeError: Cannot read property 'child' of undefined"



我有一个云函数,每当有新消息写入与该用户相关的数据库时,它就会向接收方发送通知。我似乎总是犯错误。

我是云功能的新手,似乎无法解决这个问题。

请参阅下方的云功能

exports.sendNotification = functions.database.ref('/messages/{userId}/{messageId}')
.onWrite((snapshot,context) => {

//get the userId of the person receiving the notification because we need to get their token
const receiverId = context.params.userId;
console.log("receiverId: ", receiverId);

//get the user id of the person who sent the message
//const senderId = context.data.child('senderUid').val();
const senderId = snapshot.data.child('senderUid').val();
console.log("senderId: ", senderId);

//get the message
const message = snapshot.data.child('messageBody').val();
console.log("message: ", message);

//get the message id. We'll be sending this in the payload
const messageId = context.params.messageId;
//const messageId = event.params.messageId;
console.log("messageId: ", messageId);

//query the users node and get the name of the user who sent the message
return admin.database().ref("/Renters/" + senderId).once('value').then(snap => {
const senderName = snap.child("houseName").val();
console.log("senderName: ", senderName);

//get the token of the user receiving the message
return admin.database().ref("/users/" + receiverId).once('value').then(snap => {
//const token = snap.child("messaging_token").val();
const token = event.data.child('receiverToken').val();
console.log("token: ", token);

//we have everything we need
//Build the message payload and send the message
console.log("Construction the notification message.");
const payload = {
data: {
data_type: "direct_message",
title: "New Message from " + senderName,
message: message,
message_id: messageId,
}
};

return admin.messaging().sendToDevice(token, payload)
.then(function(response) {
console.log("Successfully sent message:", response);
//using this return statement to avoid error
return response.successCount;
})
.catch(function(error) {
console.log("Error sending message:", error);
});
});
});
});

我已经做了一些测试,并且在文档中,DataSnapshot对象中没有属性data。由于此调用,它将给出undefined值。因此,如果你对此调用任何东西,都会导致这样的错误。

如果将...snapshot.data.child('senderUid').val()...更改为:,应该会有所帮助

...snapshot.child('senderUid').val()...

不知道你为什么在这里添加这个data,但是即使你有一个名为"的孩子,它也不起作用;数据";在引用的路径中。

相关内容

最新更新