Экспресс и отправка сообщений об ошибках на узел - PullRequest
0 голосов
/ 17 февраля 2019

Как вывести ошибки проверки в представление для опции unique: true электронной почты?В моем представлении руля я получаю errors переданный от var errors = req.validationErrors(); и отображаю его в работающем представлении.но проверка уникальности электронной почты происходит на user.save((err) и просто отправляется на консоль.Проверка работает правильно, ни один пользователь не создается, если есть дубликат электронной почты.Я просто пытаюсь отправить сообщение об ошибке в представление.Могу ли я сделать req.check для unique: 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('/');
        });
    };    

1 Ответ

0 голосов
/ 17 февраля 2019

Если я не ошибаюсь, вы используете экспресс-валидатор для проверки.Проблема в том, что вы смешиваете две вещи: проверку формы и ограничения базы данных.

Уникальность не является внутренним свойством элемента данных и не может быть проверена независимо от всего набора.

ВыМожно только проверить уникальность, используя вызов в базу данных.Если ваша схема базы данных определяет этот атрибут / столбец как уникальный, то попытка сохранить его приведет к ошибке (по крайней мере, в базах данных на основе SQL и MongoDB).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...