【发布时间】:2020-10-19 22:38:00
【问题描述】:
我正在使用 FCM 和 Firebase 函数向用户发送推送通知,但遇到了问题。我收到一条错误消息“TypeError:无法将未定义或 null 转换为对象”,并认为这是由以下一行引起的:
const tokens = Object.keys(afterData.fcm_tokens)
但是,当将其打印到控制台时,它的值似乎是数组形式,因此标记不会为空:
sendPush
[ 'my_long_fcm_token01', 'my_long_fcm_token02', 'my_long_fcm_token03' ]
以下是完整的错误描述:
TypeError: Cannot convert undefined or null to object
at Function.keys (<anonymous>)
at exports.sendPush.functions.database.ref.onWrite (/srv/index.js:57:27)
at cloudFunction (/srv/node_modules/firebase-functions/lib/cloud-functions.js:134:23)
at /worker/worker.js:825:24
at <anonymous>
at process._tickDomainCallback (internal/process/next_tick.js:229:7)
这是我的推送功能:
exports.sendPush = functions.database.ref('/user_pushes/{uid}').onWrite((change, context) => {
const afterData = change.after.val();
const tokens = Object.keys(afterData.fcm_tokens)
console.log(tokens)
const payload = {
notification: {
uid: afterData.sender_uid,
title: afterData.sender_name,
subtitle: afterData.roomId, // I need this property as room id
body: afterData.message,
badge: '1',
sound: 'default',
mutable_content: 'true',
},
data: {
image_url: afterData.image_url
}
};
return admin.messaging().sendToDevice(tokens, payload);
});
编辑:根据建议,我将问题编辑为 1 以便更专注。
【问题讨论】:
-
您的
change.after.val()函数显然返回 null。 -
感谢罗伯特·哈维的建议。我是 Javascript 新手,您能具体说明一下应该如何修复它吗?
-
我首先要弄清楚该函数的作用,以及它返回 null 的原因。
-
在 Stack Overflow 上,请将每个帖子限制在一个问题或问题上。否则,它可能会因为“需要关注”而关闭。
标签: javascript firebase push-notification google-cloud-functions firebase-cloud-messaging