我找不到在猫鼬中提供验证电子邮件唯一性的正确方法。我没有发现真正有效的方法。我当时正在考虑使用Schema.pre,但是如果是这样的话,我将如何编写代码呢?猫鼬的文档非常差,没有描述pre的方式或作用。
如果有人能告诉我这通常是如何完成的或向正确的方向指出,我将不胜感激。我不明白为什么这么简单的东西在猫鼬中没有简单的解决方案...
答案 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");
}
});