尝试/捕获阻止ExpressJS中的意外行为

时间:2018-10-15 08:55:08

标签: javascript node.js express

下面,我通过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 });
    }
  });

0 个答案:

没有答案