检查用户名/电子邮件是否已经存在于MongoDB中进行注册的有效方法



我在NodeJS服务器使用ExpressJS来处理我的/register路由。注册过程中的一个步骤是确保用户的用户名邮件和都是唯一的,如果是,他们可以注册并将他们的帐户添加到用户集合。

目前,我的代码如下"检查用户名/电子邮件是否存在"一步:

// Checking is user already exists (username & email)
try {
const usernameExists = await User.findOne({username: req.body.username});
const emailExists = await User.findOne({email: req.body.email});
if (usernameExists && emailExists) return res.status(400).send("Username and email already taken");
if (emailExists) return res.status(400).send("Email already taken");
if (usernameExists) return res.status(400).send("Username already taken");
} catch (e) {
return res.status(500).send("Error querying DB to check if username/email exists or not");
}

这感觉非常低效,因为我对数据库进行了两次查询。无论如何要结合两个User.findOne...查询?还是说这个任务就应该这样完成?

非常感谢!

您可以检查模式本身的唯一值,只需在模式中为您想要的字段添加唯一。这样的

email:{
unique:true,
required:true,
},
username:{
unique:true,
required:true,
}

您可以使用$or

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

最新更新