【问题标题】:custom field validation and error handling in nodejs and expressnodejs 和 express 中的自定义字段验证和错误处理
【发布时间】:2020-04-25 05:32:20
【问题描述】:
我正在尝试在注册时添加用户名字段,我已经使用 express-validator 进行了验证,以确保它不为空,因为我希望每个人都有自己唯一的用户名。就像我们使用电子邮件检查用户是否存在一样,我也想检查使用用户名...请检查我下面的代码
知道如何显示用户名错误,与已存在的电子邮件错误分开吗?
try {
let user = await User.find({
'email': email,
'username': username
})
//Check if user exists
if (user) {
res.status(400).json({
errors: [{
msg: 'user with that name or username already exist'
}]
})
}
【问题讨论】:
标签:
javascript
node.js
express
mongoose
【解决方案1】:
您应该使用findOne(如果文档不存在则返回null)而不是find 返回和数组
if(user)
永远是真的,如下所示
try {
let user = await User.findOne({ 'email': email, 'username': username })
//Check if user exists
if (!user) {
res.status(400).json({
errors: [{ msg: 'user with that name or username already exist' }]
})
}
}
此外,您的查询将查找电子邮件和用户名的组合,即您提供的用户名或电子邮件都存在的地方
你可以做的是使用$or操作符
try {
let user = await User.findOne({
$or: [{
'email': email
}, {
'username': username
}]
})
//Check if user exists
if (!user) {
res.json({
error: "Both email and username doesn't exist"
})
} else if (user) {
if (user.email != email) {
res.json({
error: "Email Doesn't exists"
})
} else if (user.username != username) {
res.json({
error: "Username Doesn't exists"
})
}
else {
res.json({
error: "Both Username and Email exists"
})
}
}
}