Ниже я регистрирую пользователя после аутентификации через FB / Google.Проблема здесь в блоке try.Когда я выкидываю ошибку, например, когда displayName уже занято или пользователь уже зарегистрирован, блок catch срабатывает, но он продолжает выполнять код в блоке try, потому что после выброса ошибки я всегда перенаправляюсь в браузере на '/'(последняя строка кода в блоке try).
Одним из решений будет программная навигация пользователя на стороне клиента, но я не понимаю, почему этот существующий код не работает должным образом.
app.post("/auth/register", requireAuth, async (req, res) => {
try {
if (req.user.registered === true) {
throw new Error("You have already registered.")
}
const existingUser = await User.findOne({
displayName_lower: req.body.displayName
});
if (existingUser) {
throw new Error("Display name already is use! Try another.");
}
await User.findByIdAndUpdate(
{ _id: req.user.id },
{
displayName: req.body.displayName,
displayName_lower: req.body.displayName,
registered: true,
joined: Date.now()
}
);
// Create and save new faves, follows, followers, messageBox doc for every newly reg'd user
await new Faves({
_owner: req.user.id
}).save();
await new Follows({
_owner: req.user.id
}).save();
await new Followers({
_owner: req.user.id
}).save();
await new MessageBox({
_owner: req.user.id
}).save();
res.redirect("/");
} catch (e) {
res.status(400).send({ error: e.message });
}
});