javascript - 从 mongodb 返回数据时节点 JS 错误
问题描述
我有这个功能
const run = async () => {
await LOLUserData.LOLUserData(3)
const LOLUserDataResult = await LOLUserData.LOLUserData()
console.log(LOLUserDataResult)
await app.listen(PORT, () => {
console.log(`Arena Gaming Server is listening on port ${PORT}!`)
})
}
在启动时将数据发送到此函数
//=============================================================================
// [Mongoose] Get Active Sessions users data [userId, IGN, LOLSummonerId, LOLRegion] {Step (2)} {League of Legends Tracking}
//=============================================================================
const User = require('../../models/user')
const getLOLUserData = (userId) => {
// Get User data if (valid userId & IGN exsists)
User.findOne({'userId': userId, $and: [ { IGN: { $ne: '' , $exists: true} } ]})
.then(user => {
return ( [
user.userId,
user.IGN,
user.LOLRegion,
user.LOLSummonerId
])
} )
.catch(err => {
console.log(err)
})
};
exports.LOLUserData = getLOLUserData
应该从上一个函数返回数组,const LOLUserDataResult = await LOLUserData.LOLUserData()
console.log(LOLUserDataResult)
但我得到一个错误
TypeError: Cannot read property 'userId' of null
我在这里做错了什么?
解决方案
看起来User.findOne()
没有找到与您的查询匹配的记录。查询成功执行,但未找到任何结果。承诺解析为null
,表示未找到任何记录。您的then()
回调运行,并尝试访问抛出异常的 ,即user.userId
。null.userId
在你的then()
回调中,你可能应该有这样的东西,以防止没有结果。
.then(user => {
if (user) {
return [
user.userId,
user.IGN,
user.LOLRegion,
user.LOLSummonerId
]
} else {
return [] // or whatever makes sense.
}
} )
推荐阅读
- r - 在 R 中合并许多具有不同列和标题的 csv 文件
- haskell - unsafeDupablePerformIO 和 accursedUnutterablePerformIO 有什么区别?
- notepad++ - 如何创建仅在 Notepad++ v 7.8.2 中打开特定文件的快捷方式
- c# - 有没有办法设置一个 TileBrush 让它总是 1 瓦高,但不同数量的瓦宽?
- c - 读取文本文件并将其存储在 C 中的二维数组中
- angular - Angular - 开放层
- javascript - 单击jQuery / javascript中的日历时如何打开表单?
- android - Android RecyclerView 滚动时无法正确计算 TextView MeasuredHeight
- linux - aarch64-linux-gnu-ld:没有输入文件
- ffmpeg - 如何计算从高分辨率视频创建的低分辨率视频的比特率?