我对nodejs非常陌生,对于以下代码,我遇到了上述错误。任何帮助表示赞赏。谢谢。
PushNotifications.sendMessageToAll(announcement, (err,res) => {
if (err){
return res.status(500).send()
}
res.status(200).send()
}
sendMessageToAll: function (notification, cb) {
payload = {....}
admin.messaging().subscribeToTopic(tokens,topic).then((res) =>{
return admin.messaging().sendToTopic('/topics/NATA', payload)
}).then((res) =>{
console.log('sent', res)
cb(undefined,res)
}).catch((err) =>{
console.log('Subscribed error',err)
cb(err,undefined)
})
}
}
答案 0 :(得分:0)
您实际上是将undefined
传递到回调cb
,该回调期望第二个参数是响应对象
.catch((err) =>{
console.log('Subscribed error',err)
cb(err,undefined)
})
您需要使回调程序能够处理没有res
才能设置状态的情况。
答案 1 :(得分:0)
在您的诺言的catch
块中,您无需输入res
就调用回调:
admin.messaging().subscribeToTopic(tokens,topic).then((res) =>{
return admin.messaging().sendToTopic('/topics/NATA', payload)
}).then((res) =>{
console.log('sent', res)
cb(undefined,res)
}).catch((err) =>{
console.log('Subscribed error',err)
cb(err,undefined) // <-- HERE the second param is res!
})
}
}
编辑
在res
块中未定义 catch
。一种方法可能是:
let outerRes;
admin.messaging().subscribeToTopic(tokens,topic).then((res) =>{
outerRes = admin.messaging().sendToTopic('/topics/NATA', payload)
return outerRes;
}).then((res) =>{
console.log('sent', res)
cb(undefined,res)
}).catch((err) =>{
console.log('Subscribed error',err)
cb(err,outerRes) // <-- HERE the second param is res!
})
}
}
答案 2 :(得分:0)
您收到的错误是因为status
上不存在属性undefined
,该属性正在通过以下行传回:
cb(err,undefined)
调用方需要一个response
对象,因为它希望使用响应对象来设置HTTP状态代码并将响应发送回浏览器:
return res.status(500).send()
解决方案很简单:将res
(“ response”的缩写)传递给错误回调,而不是undefined
:
}).catch((err) =>{
console.log('Subscribed error', err)
cb(err, res)
})