checkBody не работает в форме при отправке - PullRequest
0 голосов
/ 22 октября 2019

В настоящее время я пытаюсь зарегистрировать пользователя на турнирную запись. Ожидаемый результат - пользователь, который зарегистрировался в турнирном посте, будет сохранен в регистр имен коллекции моделей. Однако, если я оставлю оба поля для Полного имени и Контакта после нажатия кнопки «Отправить», ошибка останется равной cannot read property id of undefined. В противном случае, если введены оба поля, оно отправлено. Я что-то здесь упускаю?

tour.pug (кнопка, которая перенаправляет пользователя в форму регистрации)

a.btn.btn-outline-dark.btn-sm(href='/register/form/'+tournament._id) Join

register_tournament.pug (форма, которую пользователь проверяет для подтверждения информации перед отправкой, также необходимачтобы ввести полное имя и контакт, так как другие поля имеют значения от текущего пользователя и турнира)

form(method='POST', action='/register/submit')
        #form-group
            strong Tournament Id
            input.form-control(type='hidden', name='tournamentId' value=tournament.id)
            p.text-muted your tournament id
        #form-group
            strong Tournament Name
            input.form-control(type='text', name='tournamentName', value=tournament.title, readonly)
            p.text-muted your tournament name
        #form-group
            strong User Id
            input.form-control(type='hidden', name='playerId' value=user.id)
            p.text-muted your user id
        #form-group
            strong Username
            input.form-control(type='text', name='playerUsername', value=user.username, readonly)
            p.text-muted your steam username
        #form-group
            strong Steam Id
            input.form-control(type='hidden', name='playerSteamId', value=user.steamId)
            p.text-muted your steam id
        #form-group
            strong Full Name
            input.form-control(type='text', name='playerName')
            p.text-muted your full name
        #form-group
            strong Contact Number
            input.form-control(type='text', name='playerContact')
            p.text-muted your contact number
        input.btn.btn-outline-dark.btn-sm(type='submit', value='Submit')

register.js (route / register.js)

//Render Register Tournament
router.get('/form/:id', ensureAuthenticated, function(req, res){
    Tournament.findById(req.params.id, function(err, tournament){
        User.findById({user: req.user_id}, function(err, user){
            res.render('register_tournament',{
                user: req.user,
                tournament: tournament
            });
        });
    });
});

//Submit Register Tournament
router.post('/submit', ensureAuthenticated, function(req, res){

            req.checkBody('playerName', 'Full name is required').notEmpty();
            req.checkBody('playerContact', 'Contact number is required').notEmpty();

            let errors = req.validationErrors();

            if(errors){
                res.render('register_tournament', {
                    errors: errors,
                    user: req.user,
                });
            }
            else{
                let register = new Register();
                register.tournamentId = req.body.tournamentId;
                register.tournamentName = req.body.tournamentName;
                register.playerId = req.body.playerId;
                register.playerUsername = req.body.playerUsername;
                register.playerSteamId = req.body.playerSteamId;
                register.playerName = req.body.playerName;
                register.playerContact = req.body.playerContact;

                register.save(function(err){
                    if(err){
                        console.log(err);
                        return;
                    }
                    else{
                        req.flash('success', 'User registered');
                        res.redirect('/');
                    }
                });    
            }
});

ОБНОВЛЕНИЕ: Регистрация работает, если я ввожу два поля: полное имя и контактный номер. Однако, если я оставлю это поле пустым, моя проверка не будет работать для обоих полей. Есть идеи?

1 Ответ

0 голосов
/ 22 октября 2019

Исправлено при отправке, вот как я это исправил.

router.post('/submit', ensureAuthenticated, function(req, res){

    Tournament.findOne({tournament:req.tournament}, function(err,tournament){
        req.checkBody('playerName', 'Full name is required').notEmpty();
        req.checkBody('playerContact', 'Contact number is required').notEmpty();
        req.checkBody('tournamentId', 'Tournament id is required').notEmpty();
        req.checkBody('tournamentName', 'Tournament name is required').notEmpty();
        req.checkBody('playerId', 'Player id is required').notEmpty();
        req.checkBody('playerUsername', 'Player username is required').notEmpty();
        req.checkBody('playerSteamId', 'Player steam id is required').notEmpty();

        let errors = req.validationErrors();

        if(errors){
            res.render('register_tournament', {
                errors: errors,
                user: req.user,
                tournament: tournament
            });
        }
        else{
            let register = new Register();
            register.tournamentId = req.body.tournamentId;
            register.tournamentName = req.body.tournamentName;
            register.playerId = req.body.playerId;
            register.playerUsername = req.body.playerUsername;
            register.playerSteamId = req.body.playerSteamId;
            register.playerName = req.body.playerName;
            register.playerContact = req.body.playerContact;

            register.save(function(err){
                if(err){
                    console.log(err);
                    return;
                }
                else{
                    req.flash('success', 'User registered');
                    res.redirect('/');
                }
            });    
        }
    });
...