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

185
Views
¿Cómo muestro mi mensaje de bloqueo de captura cuando no hay una coincidencia de ID?

Obtengo datos de una API y los muestro en mi servidor local.

A continuación se muestra mi código para obtener datos que coincidan con el ID de los datos de la API:

 router.get('/:id', async (req, res) => { checkString(req.params.id) try { const person = await peopleData.getPersonById(req.params.id); res.json(person); } catch (e) { res.status(404).json({ message: 'There is no person with that ID' }); }

Si no hay ninguna coincidencia, quiero mostrar el mensaje como en el bloque catch, pero el código no va allí ya que no obtener una coincidencia técnicamente no es un error.

Así que probé el siguiente código para obtener este mensaje:

 router.get('/:id', async (req, res) => { checkString(req.params.id) try { const person = await peopleData.getPersonById(req.params.id); if(!person) res.json('There is no person with that ID'); // Added new line here res.json(person); } catch (e) { res.status(404).json({ message: 'There is no person with that ID' }); }

Esto funciona, pero imprime el mensaje con comillas alrededor como una cadena, ¿hay alguna manera de mostrar el mensaje en el bloque catch si no se encuentra ninguna coincidencia?

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

0

Puede arrojar un error y la captura lo mostrará.

 if(!person) throw new Error("There is no person with that ID"); ....

luego en la captura...

 catch(e){ res.status(404).json({ message: e.message }) }
about 4 years ago · Juan Pablo Isaza Report

0

Si está enviando personas a una página de "pila de errores" de pantalla completa, ¡es posible que no necesite usar res.json ()! También puedes usar res.send()

 if(!person){ res.send('<p>There is no person with that ID</p>'; return; } // Or if(!person){ res.send('There is no person with that ID'; return; }
about 4 years ago · Juan Pablo Isaza Report

0

Está devolviendo respuestas Json, por lo que parece que su consumidor no es una página web sino otra aplicación. Si es así, debe devolver undefined o null si no se encuentra ninguna persona, y dejar que la página web o el consumidor decidan qué mensaje mostrar. Las razones son:

  1. Debería ser más fácil modificar las páginas web que el código y, por lo general, la interfaz de usuario o el personal de marketing siempre querrán ajustar (generalmente muchas veces) cada mensaje en una página web.
  2. Su aplicación es una aplicación API. El lugar donde se mostrará el mensaje de usuario no encontrado puede estar a muchos pasos de distancia. O puede ser inapropiado mostrar el mensaje, por ejemplo, la aplicación consumidora podría querer redirigir/mostrar una página de registro en su lugar si no se encuentra el usuario.
  3. Su sitio web puede ser multilingüe y no desea que el back-end se involucre en esto.

"Usuario no encontrado" en muchas situaciones no es realmente un error, pero todo depende de su aplicación.

El bloque catch en su caso debe usarse para manejar otros errores, por ejemplo, su servidor de base de datos podría estar inactivo o la solicitud de la base de datos podría haber expirado, etc. Su código actual mostrará engañosamente "usuario no encontrado" si hay un error de base de datos!

También dejaría que el controlador de errores Express se encargue de tales errores reales, en lugar de codificar el manejo de errores para cada función API que tenga:

 router.get('/:id', async (req, res, next) => { checkString(req.params.id); try { const person = await peopleData.getPersonById(req.params.id); res.json(person); // assuming getPersonById returns null if user not found } catch (e) { next(e); });

Su controlador de errores Express, donde aterriza la invocación de la next función anterior, debería ser algo como esto (suponiendo que el router es su aplicación Express):

 router.use((err, req, res, next) => { let statusCode = err.status || 500; // Assuming your app need to return only json responses res.json(err); });
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!