В настоящее время я пытаюсь зарегистрировать пользователя на турнирную запись. Ожидаемый результат - пользователь, который зарегистрировался в турнирном посте, будет сохранен в регистр имен коллекции моделей. Однако, если я оставлю оба поля для Полного имени и Контакта после нажатия кнопки «Отправить», ошибка останется равной 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('/');
}
});
}
});
ОБНОВЛЕНИЕ: Регистрация работает, если я ввожу два поля: полное имя и контактный номер. Однако, если я оставлю это поле пустым, моя проверка не будет работать для обоих полей. Есть идеи?