Полу-новый разработчик, создающий проект с использованием стека MERN.
Приложение имеет две модели: одну для Users
и одну для Tournaments
. Модель турнира имеет атрибут participants
, который является массивом.
Я написал Express внутренний маршрут, чтобы пользователь мог зарегистрироваться на Tournaments.participants []. Это выглядит так:
router.post('/:id', (req, res) => {
Tournament.findById(req.params.id)
.then(tournament => {
tournament.participants.push(req.body);
return tournament.save();
})
.then(savedTournament => res.json(savedTournament))
.catch(err => res.json(err));
});
Однако пользователь может просто нажимать кнопку «Регистрация», и у меня будет куча дублирующих пользователей, поэтому я пытаюсь написать условие, которое отключит регистрацию, если пользователь уже участвует в Tournament.participants [].
Я попытался написать условное выражение внутри маршрута Express, используя Array.includes(req.body)
, но не смог его взломать. Выглядело что-то вроде
Tournament.findById(req.params.id)
.then(tournament => {
if (tournament.participants.includes(req.body) {
return res.status(400).json({ msg: "This user already signed up for this tournament" });
} else {
tournament.participants.push(req.body);
return tournament.save();
}
})
.then(savedTournament => res.json(savedTournament))
.catch(err => res.json(err));
Я также пробовал разные варианты, например if (tournament.participants.includes(!req.body))
затем pu sh (req.body) и т. Д. c.
И я также попробовал просто рендеринг другой кнопки, если participants.includes(user)
, но я считаю, что это должно быть сделано на бэкэнде в любом случае ... Я открыт для предложений.
Кто-нибудь может мне помочь?