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

186
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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 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