gpt4 book ai didi

node.js - 这个错误: Falsy value for recipient key 'registrationTokens' 是什么意思

转载 作者:太空宇宙 更新时间:2023-11-04 00:25:37 25 4
gpt4 key购买 nike

我收到此错误:使用 gcm 推送通知时接收者 key “registrationTokens”的假值。

您可以在下面找到我的代码:

Device.find({ user: { $in: users }}, function (err, devices) {
if (err) {
logger.error('500 ' + err)
return res.status(500).json({
code: config.errorCode.status500.code,
message: config.errorCode.status500.message
})
}

var androidRegTokens = []
var iOSReqTokens = []

for (var i = 0; i < devices.length; i++) {
if (devices[i].platform == 'Android') {
androidRegTokens.push(devices[i].deviceToken)
} else {
iOSReqTokens.push(devices[i].deviceToken)
}
}

if (androidRegTokens.length > 0) {
gcmPush('Notification is sent.', androidRegTokens)
}

if (iOSReqTokens.length > 0) {
apnsPush('Notification is sent.', iOSReqTokens)
}
return res.json({ msg: 'Operation succeed.'})
})

函数 gcmPush('Notification is sent.', androidRegTokens) 的主体是:

this.sender.send(message, { registrationTokens: deviceTokens }, function (err, response) {
if (err) {
console.error(err)
}else {
console.log(response)
}
})

有谁知道我的代码有什么问题吗?起初推送通知工作得很好,但每次我调用该服务时都会发生此错误。

编辑:

感谢 Luiz Fernando,我已经解决了这个问题。问题在于函数:

gcmPush('Notification is sent.', androidRegTokens)

我忘记添加作为构造函数一部分的标题:

function GcmPush (title, message, deviceTokens) {
this.sender = new gcm.Sender(config.gcmSender)
this.sendPushNotification(title, message, deviceTokens)
}

最佳答案

deviceTokens 对象是一个假值,它可以是:null、undefined、0、''、NaN、false。

也许发生这种情况是因为您正在填充嵌套在异步操作中的 iOSReqTokens 和 androidRegTokens (看起来 Device.find 是异步的)。因此,Device.find 的回调和 for 循环发生在不同的时间。也许,for 循环是在响应之后发生的,所以这个响应将是未定义的(确实是)。

所以,你需要使用一些异步控制流库,比如PromiseAsync并确保操作顺序正确。

另外,您在哪里使用推送的注册?

关于node.js - 这个错误: Falsy value for recipient key 'registrationTokens' 是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42908390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com