首页 > 解决方案 > 从 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

我在这里做错了什么?

标签: javascriptnode.jsexpress

解决方案


看起来User.findOne()没有找到与您的查询匹配的记录。查询成功执行,但未找到任何结果。承诺解析为null,表示未找到任何记录。您的then()回调运行,并尝试访问抛出异常的 ,即user.userIdnull.userId

在你的then()回调中,你可能应该有这样的东西,以防止没有结果。

.then(user => {
    if (user) {
        return [
            user.userId,
            user.IGN,
            user.LOLRegion,
            user.LOLSummonerId
        ]
    } else {
        return [] // or whatever makes sense.
    }
} )

推荐阅读