MongoDB/mongoose模式模型行为返回undefined

omvjsjqw  于 2023-04-05  发布在  Go
关注(0)|答案(1)|浏览(187)

在我的mongodb/mongoose模式模型中,我设置了一个userroles文档条目,如下所示:

const mongoose = require('mongoose')
const {Schema} = mongoose

const userSchema = new Schema({
  username: {type: String, required: true},
  password: {type: String, required: true},
  roles: {
    User: {type: Number, default: 1234},
    Editor: Number, 
    Admin: Number,
  },
  refreshToken: [String],
})
//
module.exports = mongoose.model('User', userSchema)

不需要角色,默认情况下,所有新注册的用户都以用户角色(代码1234)开始。
当我用mongoose访问db中的用户时:

const handleLogin = async (req, res) => {
...
    const foundUser = await User.findOne({username: user}).exec()
    console.log(foundUser.roles)
    console.log(Object.values(foundUser.roles))
...
}

Console.log向我发送了以下输出:

{ User: 2023 }
[ 2023, undefined, undefined ]

第一个对我来说没问题,它反映了我创建文档时的文档状态,以及它在数据库中出现的状态,只有user,但第二个更模糊,使未使用的模型条目重新显示为undefined。
对于我的API和verifyRole中间件和路由来说,这一点并不令人不安,一切都正常,但我喜欢理解和控制,目前这不是100%的情况。
如何避免出现undefined?
谢谢

fdx2calv

fdx2calv1#

在第二个console.log中获取undefined值的原因是,Object.values()返回对象的所有可枚举属性值的数组,包括未显式设置的属性值(即,在本例中为Editor和Admin)。
参见MDN documentation
如果只想查看设置值,请记录Object.values(foundUser.roles).filter(r => r !== undefined)
这将返回一个不是undefined的值数组,例如[2023]
自己看吧:

var user = {a:1,b:undefined,c:undefined};
console.log(Object.values(user));
console.log(Object.values(user).filter(r => r !== undefined));

相关问题