我正在使用我的第一个Express + Sequelize应用程序,并希望使用Sequelize的验证机制来验证提交的表单,而无需重新实现前端的所有验证(或使用其他验证库,如快递验证员等)。所以,基本上我想做类似以下的事情:
var signup = function(req, res) {
res.render('signup', { title: 'Sign-up' });
}
router.get('/signup', signup);
router.post('/signup', function(req, res) {
User.create({
email: req.body.email,
...
}).then(function(user) {
req.flash('info', 'User created successfully.');
res.redirect('/login');
}).catch(function(err) {
// [1] Bring sequelize's error messages into a suitable form somehow
if (req.xhr) {
res.json(err);
}
else {
// [2] Fallback for non-JS browsers
req.flash('error', err);
signup(req, res);
}
});
});
非常感谢!
答案 0 :(得分:0)
我建议您将验证逻辑与“数据库”逻辑分开。它允许您更明确地显示验证错误并降低复杂程度。
将所有逻辑移至单独的文件
router.post('/signup' create)
create(req, res, next){
createForm.validate(req)
.then(()=>{
return createForm.create(req);
})
.then((createdUser) => {
req.flash('info', 'User created successfully.');
res.redirect('/login');
})
.catch((error)=> {
if(error instanceof ValidationError) {
req.flash('error', error);
return signup(req, res);
}
next(error); //go to handle of unexpected error
});
}