最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Express和节点向车把视图发送错误消息

运维笔记admin9浏览0评论

Express和节点向车把视图发送错误消息

Express和节点向车把视图发送错误消息

如何将验证错误输出到电子邮件unique: true选项的视图?在我的车把视图中,我正在从errors传递var errors = req.validationErrors();并在正在工作的视图中显示它。但唯一性的电子邮件验证将发送到user.save((err),并且只是被发送到控制台。验证工作正常,如果有重复的电子邮件,则不会创建用户。我只是想将错误消息发送到视图。我可以为req.checkunique: true吗?

const UserSchema = new Schema({
    email: { type: String, index: { unique: true } },
    password: { type: String, required: true }
});

我的createUser.handlebars视图

{{#if errors}}
  <section class="errors">
    <ul>
      {{#each errors}}
        <li>{{this.msg}}</li>
      {{/each}}
    </ul>
  </section>
{{/if}}

createUser函数

module.exports.createUser =
    (req, res, next) => {

        let user = new User({
            email: req.body.email,
            password: req.body.password
        });


        req.check('email', 'Invalid email').isEmail(); 
        req.check('password', "Passwords must match").isLength({min: 6}).equals(req.body.passwordConfirmation);

        var errors = req.validationErrors();  // save any error messages

        // check if there are any errors
        if (errors) {
            req.session.errors = errors; 

            req.session.success = false;
            return res.redirect('/users/new'); 
        } else {
            req.session.success = true;
        }
        // save the user
        user.save((err) => {
            if (err) {
                console.log("Error : %s ", err);
            }
            // set the session messages back to null and redirect
            req.session.success = null;    
            req.session.errors = null;                    
            res.redirect('/');
        });
    };    
回答如下:

如果我没错,你使用express-validator进行验证。问题是你要混合两件事:表单验证和数据库约束。

唯一性不是数据项的固有属性,也不能独立于整个集进行检查。

您只能使用对数据库的调用来检查唯一性。如果您的数据库模式将此属性/列定义为唯一,那么尝试存储它将引发错误(至少在基于SQL的数据库和MongoDB中)。

发布评论

评论列表(0)

  1. 暂无评论