Вы должны использовать findOne
(он возвращает null
, если документ не существует) вместо этого, так как find
возвращает и массив, так что
if(user)
всегда будет true, что-то вроде ниже
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' }]
})
}
}
Кроме того, ваш запрос будет искать комбинацию адреса электронной почты и имени пользователя, ie, где существует как имя пользователя, так и адрес электронной почты, предоставленные вами.
Что вы можете сделать, это использовать $ или оператор
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"
})
}
}
}