Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

214
Vistas
¿Cómo puedo pasar errores de Servicios a Controladores en Node.js?

Estoy tratando de trabajar en la autenticación de manera organizada con un controlador y un servicio de la siguiente manera. Aunque ha sido difícil encontrar una manera de pasar los mensajes de error de los servicios a los controladores. El usuario se guarda, pero si quiero comprobarlo el correo ya existe no pasa nada.

Controlador:

 const { isEmail, isEmpty } = require("../middleware/authMiddlewareValidators"); const { newUser } = require("../services/authServices"); // Register exports.register = async (req, res) => { const { firstName, lastName, email, password } = req.body; if (isEmpty(email)) { res.status(400).json({ message: "Email must not be empty" }); return; } if (!isEmail(email)) { res.status(400).json({ message: "Please provide a valid email adress" }); return; } if (isEmpty(password)) { res.status(400).json({ message: "Password must not be empty" }); return; } if (password.length < 6) { res .status(400) .json({ message: "Password must have at least 6 characters" }); return; } try { await newUser(firstName, lastName, email, password) res.status(200).json({ message: "signup success! please login." }); } catch (error) { console.log(error); res.status(500).json({message: error}) } };

Servicio:

 const User = require("../models/User-model"); const bcrypt = require("bcryptjs"); const passport = require("passport"); const { transporter } = require("../configs/nodemailer"); exports.newUser = async (firstName, lastName, email, password) => { try { let user = await User.findOne({ email }); if (user) { throw new Error("This email is already taken"); } else { const salt = bcrypt.genSaltSync(10); const hashPass = bcrypt.hashSync(password, salt); const newUser = new User({ firstName: firstName, lastName: lastName, email: email, password: hashPass, }); newUser.save(() => { transporter.sendMail({ to: newUser.email, from: process.env.SCHOOLSCOOL_EMAIL, subject: "Succefull register!", html: `<p>Welcome to School's Cool ${newUser.firstName} ${newUser.lastName}, <br> <br> Please login to use the web application. <br><br> Thank you.</p>`, }); }); } } catch (error) { throw new Error(error.message); } };

No estoy seguro de qué estoy haciendo mal, pero no puedo pasar el mensaje si el usuario ya existe...

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

puedes hacer que el servicio devuelva un objeto:

 return { type: 'Error', message: err };

y si no hay errores devolverá el mismo objeto con tipo y mensaje y si hay algún dato lo pondrás en el mismo objeto así:

 return { type: 'Success', statusCode: 200, message: 'Users found successfully', users };

luego recibirá estos datos en su controlador mediante la destrucción de objetos:

 const {type, message, statusCode, users} = await userServices.getUsers();

y finalmente puede verificar si el tipo es Error o Éxito

 if (type === 'Error){ return res.status(statusCode).json({type, message}); }
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda