Intento escribir una Api usando express y sequelize. Estoy escribiendo crear una función de usuario y usar bcrypt para cifrar la contraseña.
const createNewUser = (data) => { return new Promise(async (resolve, reject) => { try { let check = await checkUserEmail(data.email) if (check === true) { resolve({ errcode: 1, errMessage: 'Your email is already exist!', }) } let hashPassWordFromBcrypt = await hashUserPassWord(data.passWord) await db.User.create({ email: data.email, passWord: hashPassWordFromBcrypt, firstName: data.firstName, lastName: data.lastName, address: data.address, phoneNumber: data.phoneNumber, gender: data.gender === '1' ? true : false, roleId: data.roleId, }) resolve({ errcode: 0, errMessage: 'OK', }) } catch (error) { reject(error) }}) }
const salt = bcrypt.genSaltSync(10) const hashUserPassWord = (password) => { return new Promise(async (resolve, reject) => { try { let hashPassWord = await bcrypt.hashSync(password, salt) resolve(hashPassWord) } catch (error) { reject(error) } }) } const checkUserEmail = (email) => { return new Promise(async (resolve, reject) => { try { const user = await db.User.findOne({ where: { email } }) if (user) { resolve(true) } resolve(false) } catch (e) { reject(e) } }) } Yo uso cartero para probar. El problema es cuando envío datos con un correo electrónico que ya existe . La respuesta: errCode: 1 y errMasege: Your email is already exist pero se creó un nuevo usuario con el mismo correo electrónico . Pero si publico una solicitud con un correo electrónico ya existente y sin contraseña , no se crea ningún nuevo usuario . Ayúdame. Gracias.
Una sentencia de resolve o reject no sale de la función ejecutora de promesa. Deberías escribir
if (check === true) { return resolve({ errcode: 1, errMessage: 'Your email is already exist!', }) } de lo contrario, la operación db.User.create se llevará a cabo posteriormente.
(Tu codigo
if (user) { resolve(true) } resolve(false) también parece suponer que resolve sale de la función de ejecutor. Pero en este caso particular, no importa, porque resolve(false) no tiene efecto si la promesa ya se ha resuelto como true ).