Tengo un servicio web simple y tiene una ruta para registrar usuarios,
Quiero que cuando exista un correo electrónico en la base de datos, arroje un error con el estado 400 u otro
lo he hecho asi
controladores/usuario.js
const { User } = require('../models/user') exports.create = async (req, res) => { try { const { email } = req.body const user = await User.findOne({ email }) if (user) { return res.json({ err: 'email already exists' }) } await User.userValidation(req.body) await User.create(req.body) return res.json({}) } catch (err) { res.status(400).send({ err }) } }PERO, siempre da el estado de 200,
Dónde está el problema ?
Agregue el estado a su respuesta:
if (user) { return res.status(400).json({ err: 'email already exists' }) }Simplemente puede enviar el estado 400 al verificar if(user)
if(user){ res.status(400).jsom({ err: "Email already exists" }); } O Amenace los errores y agregue un middleware usando next (un poco más complicado que el primero, pero más profesional)
exports.create = async (req, res, next) => { try { const { email } = req.body const user = await User.findOne({ email }) if (user) { throw new Error("Email already exists"); } await User.userValidation(req.body) await User.create(req.body) return res.json({}) } catch (err) { next(err, req, res, next); } }En el siguiente middleware, puede amenazar con el error y enviar la respuesta que necesite. (err, req, los objetos res se envían como referencias, por lo que puede usarlos allí)