繁体   English   中英

Express.js + Sequelize +表单验证

[英]Express.js + Sequelize + Form validation

我正在开发我的第一个Express + Sequelize应用程序,并且希望使用Sequelize的验证机制来验证提交的表单,而不必在前端重新实现所有验证(或使用其他验证库,例如express-validator等)。 因此,基本上,我想执行以下操作:

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);
        }
    });
});
  1. 在不手动将Sequelize错误消息按摩到JSON对象中的情况下,解决[1]的好方法是什么?
  2. 您如何在前端处理JSON以将字段标记为包含错误,而无需手动对每个字段进行处理?
  3. 用发布的数据重新填充表单的建议方法是什么? 我在网上搜索过很多东西,但是很难找到关于此的任何信息,而且每个人似乎都只是在模板中手动设置value属性(在处理check / radio / combo框时非常繁琐) )。 我知道通过AJAX提交表单时这不是问题,但是在没有JavaScript恕我直言的情况下,表单也应该可以正常使用。

非常感谢!

我建议您将验证逻辑与“数据库”逻辑分开。 它使您可以更明确地显示验证错误并降低复杂度。

将所有逻辑移动到单独的文件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
            });
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM