Javascript 在API post中注册用户时设置电子邮件和用户名的多重验证

Javascript 在API post中注册用户时设置电子邮件和用户名的多重验证,javascript,node.js,express,mongoose,Javascript,Node.js,Express,Mongoose,我正在设置一个post呼叫来注册一个新用户。代码检查用户模型中是否存在电子邮件。如果没有,则会创建一个新用户。然而,我刚刚意识到我还需要检查用户名是否已经存在。我对设置API调用非常陌生,因此我不确定如何重构/添加另一个fineOne调用或另一个方法,以便在创建新用户之前查看用户名是否也存在 router.post("/register", (req, res) => { User.findOne({ email: req.body.email }).then(user => {

我正在设置一个post呼叫来注册一个新用户。代码检查用户模型中是否存在电子邮件。如果没有,则会创建一个新用户。然而,我刚刚意识到我还需要检查用户名是否已经存在。我对设置API调用非常陌生,因此我不确定如何重构/添加另一个fineOne调用或另一个方法,以便在创建新用户之前查看用户名是否也存在

router.post("/register", (req, res) => {
  User.findOne({ email: req.body.email }).then(user => {
    if (user) {
      return res.status(400).json({ email: "Email already exists" });
    } else {
      const newUser = new User({
        username: req.body.username,
        email: req.body.email,
        password: req.body.password
      });
    }
  });
});


因此,我需要添加代码以查看用户名是否存在。如果有,返回404消息,并继续检查电子邮件是否存在。然后我可以添加新用户。

对于带析取的find,还有一些额外的语法。看起来是这样的:

User.findOne({ $or:[ { email: req.body.email }, { username: req.body.username } ]}).then...

是否有方法访问它找到的值?所以,如果它发现一封电子邮件,我可以返回400条消息,说电子邮件已经存在,或者如果它发现用户名,用户名已经存在。是的。还有一种可能性是,找到的单个对象同时匹配用户名和电子邮件。还有一种情况是,一个现有用户有一封重复的电子邮件,而另一个现有用户有一个重复的用户名。要捕获所有这些情况,请使用find而不是findOne,然后迭代结果,如果找到的用户有匹配的电子邮件,则设置bool,如果找到的用户有匹配的用户名,则设置另一个bool。这两个bool现在涵盖所有情况:dup电子邮件、dup用户名或dup两者。