【发布时间】:2019-10-12 17:38:00
【问题描述】:
我有一个带有 MongoDB 连接的简单快速应用程序,我可以在其中注册用户。注册和登录和注销工作正常,但现在我正在尝试增加编辑用户数据的可能性。我的代码没有抛出任何错误,但也没有更新数据库中的数据。
我尝试从 stackoverflow 阅读 MongoDB 文档和类似问题。但我似乎无法让它工作。
这是我的更新路线:
User.updateOne({ id: req.session.passport.user}, {
name: req.body.name,
email: req.body.email,
password: req.body.password
}, function (err, user){
if (err) return next(err);
User.findById(req.user._id, function(err, user) {
if (err) return next(err);
return res.render('user', {
name: user.name,
email: user.email
});
});
});
});
我希望它更新我的数据库数据,但它只是呈现用户页面,没有其他任何事情发生。
编辑。 谢谢你的回答,我试过了,但它仍然只是通过,但数据库中没有任何反应。 我还尝试根据我处理注册的方式进行编辑,实际上我得到了它来保存数据,但我对这个解决方案的问题是它没有散列密码,它被保存为我的字符串D b。使用注册散列可以正常工作。我还需要以其他方式进行电子邮件验证,因为现在每次编辑数据时都需要更改它。代码如下:
router.post('/update/:name', ensureAuthenticated, function(req, res, next){
const { name, email, password, password2 } = req.body;
let errors = [];
//check required fields
if (!name || !email || !password || !password2) {
errors.push({ msg: 'Please fill in all fields' });
}
//check passwords match
if (password !== password2) {
errors.push({ msg: 'Passwords do not match' });
}
//check pass length
if (password.length < 6) {
errors.push({ msg: 'Password should be at least 6 characters' });
}
if (errors.length > 0) {
res.render('update', {
errors,
name,
email,
password,
password2
});
} else {
//validation passed
User.updateOne({ name: name, email: email, password: password })
.then(user => {
if (user) {
//user exists
errors.push({ msg: 'Email is already registered'});
res.render('update', {
errors,
name,
email,
password,
password2
});
} else {
const updateUser = new User({
name,
email,
password
});
//Hash password
bcrypt.genSalt(10, (err, salt) =>
bcrypt.hash(updateUser.password, salt, (err, hash) => {
if (err) throw err;
//set password to hashed
updateUser.password = hash;
//save user
updateUser
.save()
.then(user => {
req.flash('success_msg', 'Info updatet, log in');
res.redirect('/users/login');
})
.catch(err => console.log(err));
}));
}
});
}
});
【问题讨论】:
标签: javascript node.js mongodb