Try / Catch блокирует непредвиденное поведение в expressjs - PullRequest
0 голосов
/ 15 октября 2018

Ниже я регистрирую пользователя после аутентификации через 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 });
    }
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...