在我的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?
谢谢
1条答案
按热度按时间fdx2calv1#
在第二个
console.log
中获取undefined
值的原因是,Object.values()
返回对象的所有可枚举属性值的数组,包括未显式设置的属性值(即,在本例中为Editor和Admin)。参见MDN documentation。
如果只想查看设置值,请记录
Object.values(foundUser.roles).filter(r => r !== undefined)
。这将返回一个不是
undefined
的值数组,例如[2023]
。自己看吧: