用猫鼬验证电子邮件唯一性的正确方法是什么?

时间:2019-12-06 11:20:07

标签: javascript node.js mongodb mongoose

我找不到在猫鼬中提供验证电子邮件唯一性的正确方法。我没有发现真正有效的方法。我当时正在考虑使用Schema.pre,但是如果是这样的话,我将如何编写代码呢?猫鼬的文档非常差,没有描述pre的方式或作用。

如果有人能告诉我这通常是如何完成的或向正确的方向指出,我将不胜感激。我不明白为什么这么简单的东西在猫鼬中没有简单的解决方案...

2 个答案:

答案 0 :(得分:1)

您可以使用custom validator

var userSchema = new Schema({
  email: {
    type: String,
    validate: {
      validator: async function(email) {
        const user = await this.constructor.findOne({ email });
        if(user) {
          if(this.id === user.id) {
            return true;
          }
          return false;
        }
        return true;
      },
      message: props => 'The specified email address is already in use.'
    },
    required: [true, 'User email required']
  }
  // ...
});

答案 1 :(得分:1)

我更喜欢在注册途径中检查电子邮件的唯一性。

这样,我们可以完全控制应将哪些状态代码或错误消息发送给客户端。

router.post("/register", async (req, res) => {
  try {
    const { email, password } = req.body;

    let user = await User.findOne({ email });
    if (user) return res.status(400).send("User already registered.");

    user = new User({ email, password });
    user.password = await bcrypt.hash(user.password, 10);
    await user.save();

    res.send("registered");
  } catch (err) {
    console.log(err);
    res.status(500).send("Something went wrong");
  }
});
相关问题