Javascript req.user.roles=未定义?
代码:Javascript req.user.roles=未定义?,javascript,Javascript,代码: function isAdmin(req, res, next) { if(req.isAuthenticated()) { console.log(req.user); console.log(req.user.roles); next(); } else { res.redirect('/login'); } } { _id: 5bdf8d3bad3c971860134f6e, username: 'mark-rodgers',
function isAdmin(req, res, next) {
if(req.isAuthenticated()) {
console.log(req.user);
console.log(req.user.roles);
next();
} else {
res.redirect('/login');
}
}
{
_id: 5bdf8d3bad3c971860134f6e,
username: 'mark-rodgers',
password: 'HASHCENSORED',
display_name: 'Mark Rodgers',
email: 'test@test.com',
created: 2018-11-05T00:22:19.126Z,
roles: [ 'admin' ],
__v: 0
}
undefined
输出:
function isAdmin(req, res, next) {
if(req.isAuthenticated()) {
console.log(req.user);
console.log(req.user.roles);
next();
} else {
res.redirect('/login');
}
}
{
_id: 5bdf8d3bad3c971860134f6e,
username: 'mark-rodgers',
password: 'HASHCENSORED',
display_name: 'Mark Rodgers',
email: 'test@test.com',
created: 2018-11-05T00:22:19.126Z,
roles: [ 'admin' ],
__v: 0
}
undefined
我很困惑。有人能解释一下吗?当我console.log(req.user)
时,我可以清楚地看到有一个名为roles的属性,它包含一个数组。但是我一辈子都无法访问该数组来检查用户是否是管理员?req.user.username、.password、.display_name等都正确返回,但记录req.user.roles返回未定义
我的目标是检查数组中是否存在“admin”:req.user.roles。。。我不知道为什么这很重要,但我没有将“角色”字段添加到我的用户模型中。因此,我猜即使数据在req.user中可见,也无法访问模型中未预定义的字段。。非常有趣。如果有人有一个额外的解释为什么这将是伟大的
req.user
是您的用户模型的一个实例,根据您以前的定义,它没有roles属性,但DB这样做了,它返回了它,因此数据就在那里,您无法访问它。在mongoose模型本身上调用console.log只会返回数据库返回的数据,这就是为什么角色显示在控制台中的原因。@dotconnor是否有一种方法可以打印出模型,而不是使用console.log进行调试,如果我忘记了,我可以使用它来防止将来出现这种情况?您可以尝试查看对象()
或toJSON()
方法,但除此之外,我不确定