Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

173
Views
Express-Validator "validationResult" devuelve [objeto Objeto]

Estoy modificando el manejo de errores del middleware Express-Validator para pasar por mi middleware de manejo de errores personalizado, pero el mensaje de validationResult se resuelve en [object Object] .

Manejo de errores de Express-Validator

 const expressValidationError = (req, res, next) => { const errors = validationResult(req); if (!errors.isEmpty()) { const err = new Error(errors.array()); err.status = 400; next(err); } else { next(); } };

Middleware de manejo de errores exprés

 app.use((err, req, res, next) => { const status = err.status || 500; res.status(status).json({ error: { status: status, message: err.message || "Internal Server Error", }, }); });

Este es el resultado del objeto de error que se devuelve de validationResult :

 Result { formatter: [Function: formatter], errors: [ { value: 'b', msg: 'Username Must be Between 5 to 255 Characters Long!', param: 'username', location: 'body' } ] }

Y este es el errors.array() :

 [ { value: 'b', msg: 'Username Must be Between 5 to 255 Characters Long!', param: 'username', location: 'body' } ]

Sé que solo puedo usar res.status(400).json({ error: errors.array() }); en Express-Validator y evitar todo esto, pero preferiría que se pasara a next() y lo manejara el middleware de error.

¿Hay alguna manera de hacerlo o debo ir por el otro lado?

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Si ve el siguiente código, esto es lo que está sucediendo. Estás pasando una matriz de objetos.

 let status = new Error([{}]); console.log(status); // Error: [object Object]

Ahora, cuando verifica el objeto de validación, es algo como esto:

 // errors will be like [{ myLocation: 'body' }, { myLocation: 'query' }...]

Todo lo que tienes que hacer es una cadena:

 const expressValidationError = (req, res, next) => { const errors = validationResult(req); if (!errors.isEmpty()) { // below is only useful when you don't have array of objects // const err = new Error(errors.array().toString()); const err = new Error(errors.array().map(el => el['msg']).toString()); err.status = 400; next(err); } else { next(); } };

Agregar qué clave tiene qué error de validación:

 const expressValidationError = (req, res, next) => { const errors = validationResult(req); if (!errors.isEmpty()) { // below is only useful when you don't have array of objects // const err = new Error(errors.array().toString()); const err = new Error(errors.array().map(el => `${el[param]} - has Error: ${el['msg']}`).toString()); err.status = 400; next(err); } else { next(); } };
about 4 years ago · Juan Pablo Isaza Report

0

el problema no es el validador, sino que el objeto Error toma un parámetro de cadena como primer parámetro, y le está pasando un objeto (matriz), por lo tanto, el object object .

entonces JSON.stringifica el objeto:

 const err = new Error(JSON.stringify(errors.array()));
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!