我在网站的管理面板中设置角色时遇到了一些问题。我设置的角色是mmUser,mmMerchant,mmAdmin
当用户注册时,他们自动设置为mmUser,在管理面板中我试图将它们设置为mmMerchant,现在我可以手动执行MongoDB设置。奇怪的是,我可以通过面板将它们从商家降级到mmUser,但不能将它们作为商家。
任何想法?
Controller.get('/make-merchant/:id/', function(req, res, next){
let id = req.params.id;
Collections
.Schemas
.Users
.find()
.then(results => {
results.roles.push('mmMerchant');
results.save()
.then(user=>{
res.redirect('/management/users/');
})
.catch(next)
})
.catch(next)
});
错误日志说明了这个
TypeError: Cannot read property 'push' of undefined
Cannot read property 'push' of undefined
TypeError: Cannot read property 'push' of undefined
at Collections.Schemas.Users.find.then.results (D:\pre200\pre\routes\management\users.js:69:22)
at process._tickCallback (internal/process/next_tick.js:103:7)
最新日期代码
Controller.get('/make-merchant/:id/', function(req, res, next){
let id = req.params.id;
Collections
.Schemas
.Users
.find({_id: id })
.then(results => {
results[0].roles.push('mmMerchant');
results.save()
.then(user=>{
res.redirect('/management/users/');
})
.catch(next)
})
.catch(next)
});
答案 0 :(得分:0)
Model.find
将返回一个文档数组,因此它将是results[0].roles
。
您可以使用Model.findOne
或此处Model.findById
这只会返回一个文档(或null
)。
如果可能,您还可以使用Model.findByIdAndUpdate
例如,您可以使用$push
运算符:
Model.findByIdAndUpdate(id, {
$push: { roles: 'mmMerchant' }
})
替代方案是$addToSet
,这可以防止重复。
答案 1 :(得分:0)
更新
我知道已经修复了这个错误,对于遭受同样错误的其他人来说。
这是我的代码。
Controller.get('/make-merchant/:id/', function(req, res, next){
let id = req.params.id;
Collections
.Schemas
.Users
.findOne({_id: id})
.then(results => {
let merchantIndex = results.roles.indexOf('mmUser');
if(merchantIndex > -1){
results.roles.push('mmMerchant');
}
results.save()
.then(user=>{
res.redirect('/management/users/');
})
.catch(next)
})
.catch(next)
});