En el estudio, me quedé atascado en un punto. Intentando verificar si existe un valor en los documentos de colección de db de MongoDB usando Mongoose. Tengo una función separada que busca una entrada de DB usando findOne. Si eliminamos todo lo innecesario del código, se ve así:
const checkUserExist = async (userName) => { return await userModel.findOne ({userName}); }; const validateRegistrationData = (inputData) => { const {userName} = inputData; const userExist = checkUserExist (userName); if (userExist) { console.log ('User found') } else { console.log ('User not found') } };El problema es que siempre devuelve verdadero en este caso.
Probé un par de opciones más:
if (! userName) { } if (userName === null) { } if (userName! == null) { } if (userName === undefined) { } if (userName! == undefined) { }Modelo de documento:
const userSchema = new Schema ( { userName: {type: String, unique: true, required: true}, name: {type: String, required: true}, email: {type: String, unique: true, required: true}, encryptedPassword: {type: String, required: true}, }, );Este es claramente un error de novato, pero no encontré ninguna información clara sobre esto en la red.
Es porque no estás esperando el método checkUserExist() . Debido a que ese método devuelve una promesa, su declaración if siempre resultará verdadera. Si conviertes validateRegistrationData() en un método async y esperas la llamada a await checkUserExist() , debería funcionar como se esperaba.
Algo como esto:
const validateRegistrationData = async (inputData) => { const {userName} = inputData; const userExist = await checkUserExist(userName); if (userExist) { console.log ('User found') } else { console.log ('User not found') } };