CursosEmpresasBlogLiveConfPrecios

Gestionando Errores

Clase 13 de 23 • Curso de Next.js 2018

Contenido del curso

Introducción a Next.JS

  • 1
    ¿Dónde aprender Next.js actualizado?

    ¿Dónde aprender Next.js actualizado?

    00:14 min
  • 2
    ¿Qué es Next.JS?

    ¿Qué es Next.JS?

    01:41 min
  • 3
    Creando nuestra primera página

    Creando nuestra primera página

    07:44 min
  • 4
    Styled JSX

    Styled JSX

    09:54 min

Server Side Rendering

  • 5
    Aprende qué es Server Side Rendering

    Aprende qué es Server Side Rendering

    04:15 min
  • 6
    Intro a getInitialProps

    Intro a getInitialProps

    14:44 min
  • 7
    Utilizando el componente Link

    Utilizando el componente Link

    08:01 min
  • 8
    Recibiendo Parámetros

    Recibiendo Parámetros

    13:20 min
  • 9
    Performance de Get Initial Props

    Performance de Get Initial Props

    04:39 min
  • 10
    Vista de Podcasts

    Vista de Podcasts

    02:07 min

Componentes Reutilizables

  • 11
    Creando componentes en React

    Creando componentes en React

    15:16 min
  • 12
    Reorganizar la vista de podcasts

    Reorganizar la vista de podcasts

    03:03 min

Navegación Avanzada

  • 13
    Gestionando Errores

    Gestionando Errores

    Viendo ahora
  • 14
    Personalizando errores

    Personalizando errores

    10:21 min
  • 15
    ¿Cómo diseñar URLs?

    ¿Cómo diseñar URLs?

    03:34 min
  • 16
    Configurando Next Routes

    Configurando Next Routes

    11:26 min
  • 17
    Implementando Next Routes

    Implementando Next Routes

    08:04 min
  • 18
    Vistas Híbridas

    Vistas Híbridas

    12:56 min
  • 19
    Implementar el Modal

    Implementar el Modal

    06:24 min
  • 20
    Agregando un loader

    Agregando un loader

    03:44 min

Publicando nuestra app

  • 21
    Mejores prácticas en Github

    Mejores prácticas en Github

    04:33 min
  • 22
    Publicar la app con now

    Publicar la app con now

    02:39 min
  • 23
    Conclusiones del curso

    Conclusiones del curso

    01:07 min
Tomar examen
Resumen

En esta clase vamos a empezar a ver uno de los temas más importantes que tenemos que tener en cuenta cuando hacemos una aplicación un poquito más compleja, y es: ¿Qué pasa en nuestra aplicación si se rompe algo?

Escuelas

  • Desarrollo Web
    • Fundamentos del Desarrollo Web Profesional
    • Diseño y Desarrollo Frontend
    • Desarrollo Frontend con JavaScript
    • Desarrollo Frontend con Vue.js
    • Desarrollo Frontend con Angular
    • Desarrollo Frontend con React.js
    • Desarrollo Backend con Node.js
    • Desarrollo Backend con Python
    • Desarrollo Backend con Java
    • Desarrollo Backend con PHP
    • Desarrollo Backend con Ruby
    • Bases de Datos para Web
    • Seguridad Web & API
    • Testing Automatizado y QA para Web
    • Arquitecturas Web Modernas y Escalabilidad
    • DevOps y Cloud para Desarrolladores Web
  • English Academy
    • Inglés Básico A1
    • Inglés Básico A2
    • Inglés Intermedio B1
    • Inglés Intermedio Alto B2
    • Inglés Avanzado C1
    • Inglés para Propósitos Específicos
    • Inglés de Negocios
  • Marketing Digital
    • Fundamentos de Marketing Digital
    • Marketing de Contenidos y Redacción Persuasiva
    • SEO y Posicionamiento Web
    • Social Media Marketing y Community Management
    • Publicidad Digital y Paid Media
    • Analítica Digital y Optimización (CRO)
    • Estrategia de Marketing y Growth
    • Marketing de Marca y Comunicación Estratégica
    • Marketing para E-commerce
    • Marketing B2B
    • Inteligencia Artificial Aplicada al Marketing
    • Automatización del Marketing
    • Marca Personal y Marketing Freelance
    • Ventas y Experiencia del Cliente
    • Creación de Contenido para Redes Sociales
  • Inteligencia Artificial y Data Science
    • Fundamentos de Data Science y AI
    • Análisis y Visualización de Datos
    • Machine Learning y Deep Learning
    • Data Engineer
    • Inteligencia Artificial para la Productividad
    • Desarrollo de Aplicaciones con IA
    • AI Software Engineer
  • Ciberseguridad
    • Fundamentos de Ciberseguridad
    • Hacking Ético y Pentesting (Red Team)
    • Análisis de Malware e Ingeniería Forense
    • Seguridad Defensiva y Cumplimiento (Blue Team)
    • Ciberseguridad Estratégica
  • Liderazgo y Habilidades Blandas
    • Fundamentos de Habilidades Profesionales
    • Liderazgo y Gestión de Equipos
    • Comunicación Avanzada y Oratoria
    • Negociación y Resolución de Conflictos
    • Inteligencia Emocional y Autogestión
    • Productividad y Herramientas Digitales
    • Gestión de Proyectos y Metodologías Ágiles
    • Desarrollo de Carrera y Marca Personal
    • Diversidad, Inclusión y Entorno Laboral Saludable
    • Filosofía y Estrategia para Líderes
  • Diseño de Producto y UX
    • Fundamentos de Diseño UX/UI
    • Investigación de Usuarios (UX Research)
    • Arquitectura de Información y Usabilidad
    • Diseño de Interfaces y Prototipado (UI Design)
    • Sistemas de Diseño y DesignOps
    • Redacción UX (UX Writing)
    • Creatividad e Innovación en Diseño
    • Diseño Accesible e Inclusivo
    • Diseño Asistido por Inteligencia Artificial
    • Gestión de Producto y Liderazgo en Diseño
    • Diseño de Interacciones Emergentes (VUI/VR)
    • Desarrollo Web para Diseñadores
    • Diseño y Prototipado No-Code
  • Contenido Audiovisual
    • Fundamentos de Producción Audiovisual
    • Producción de Video para Plataformas Digitales
    • Producción de Audio y Podcast
    • Fotografía y Diseño Gráfico para Contenido Digital
    • Motion Graphics y Animación
    • Contenido Interactivo y Realidad Aumentada
    • Estrategia, Marketing y Monetización de Contenidos
  • Desarrollo Móvil
    • Fundamentos de Desarrollo Móvil
    • Desarrollo Nativo Android con Kotlin
    • Desarrollo Nativo iOS con Swift
    • Desarrollo Multiplataforma con React Native
    • Desarrollo Multiplataforma con Flutter
    • Arquitectura y Patrones de Diseño Móvil
    • Integración de APIs y Persistencia Móvil
    • Testing y Despliegue en Móvil
    • Diseño UX/UI para Móviles
  • Diseño Gráfico y Arte Digital
    • Fundamentos del Diseño Gráfico y Digital
    • Diseño de Identidad Visual y Branding
    • Ilustración Digital y Arte Conceptual
    • Diseño Editorial y de Empaques
    • Motion Graphics y Animación 3D
    • Diseño Gráfico Asistido por Inteligencia Artificial
    • Creatividad e Innovación en Diseño
  • Programación
    • Fundamentos de Programación e Ingeniería de Software
    • Herramientas de IA para el trabajo
    • Matemáticas para Programación
    • Programación con Python
    • Programación con JavaScript
    • Programación con TypeScript
    • Programación Orientada a Objetos con Java
    • Desarrollo con C# y .NET
    • Programación con PHP
    • Programación con Go y Rust
    • Programación Móvil con Swift y Kotlin
    • Programación con C y C++
    • Administración Básica de Servidores Linux
  • Negocios
    • Fundamentos de Negocios y Emprendimiento
    • Estrategia y Crecimiento Empresarial
    • Finanzas Personales y Corporativas
    • Inversión en Mercados Financieros
    • Ventas, CRM y Experiencia del Cliente
    • Operaciones, Logística y E-commerce
    • Gestión de Proyectos y Metodologías Ágiles
    • Aspectos Legales y Cumplimiento
    • Habilidades Directivas y Crecimiento Profesional
    • Diversidad e Inclusión en el Entorno Laboral
    • Herramientas Digitales y Automatización para Negocios
  • Blockchain y Web3
    • Fundamentos de Blockchain y Web3
    • Desarrollo de Smart Contracts y dApps
    • Finanzas Descentralizadas (DeFi)
    • NFTs y Economía de Creadores
    • Seguridad Blockchain
    • Ecosistemas Blockchain Alternativos (No-EVM)
    • Producto, Marketing y Legal en Web3
  • Recursos Humanos
    • Fundamentos y Cultura Organizacional en RRHH
    • Atracción y Selección de Talento
    • Cultura y Employee Experience
    • Gestión y Desarrollo de Talento
    • Desarrollo y Evaluación de Liderazgo
    • Diversidad, Equidad e Inclusión
    • AI y Automatización en Recursos Humanos
    • Tecnología y Automatización en RRHH
  • Finanzas e Inversiones
    • Fundamentos de Finanzas Personales y Corporativas
    • Análisis y Valoración Financiera
    • Inversión y Mercados de Capitales
    • Finanzas Descentralizadas (DeFi) y Criptoactivos
    • Finanzas y Estrategia para Startups
    • Inteligencia Artificial Aplicada a Finanzas
    • Domina Excel
    • Financial Analyst
    • Conseguir trabajo en Finanzas e Inversiones
  • Startups
    • Fundamentos y Validación de Ideas
    • Estrategia de Negocio y Product-Market Fit
    • Desarrollo de Producto y Operaciones Lean
    • Finanzas, Legal y Fundraising
    • Marketing, Ventas y Growth para Startups
    • Cultura, Talento y Liderazgo
    • Finanzas y Operaciones en Ecommerce
    • Startups Web3 y Blockchain
    • Startups con Impacto Social
    • Expansión y Ecosistema Startup
  • Cloud Computing y DevOps
    • Fundamentos de Cloud y DevOps
    • Administración de Servidores Linux
    • Contenerización y Orquestación
    • Infraestructura como Código (IaC) y CI/CD
    • Amazon Web Services
    • Microsoft Azure
    • Serverless y Observabilidad
    • Certificaciones Cloud (Preparación)
    • Plataforma Cloud GCP

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
  • Tyc promociones
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads

      Comentarios

        Jose Chirinos

        Jose Chirinos

        student•
        hace 8 años

        Si todo correcto: 200,
        Si no existe el contenido: 404,
        Si se prendió fuego el data center y no funciona el server: 503,
        jejej excelente clase…

        Sergio Toshio Minei

        Sergio Toshio Minei

        student•
        hace 8 años

        Manejo de Errores

        Cuando hacemos Server Side Rendering, nuestros servidor responde con un status.

        • Status 200: Todo está bien.
        • Error 404: Página no existe
        • Error 503: Hay un probblema de red o la API no está funcionando.

        Se debe de hacer un manejo de control de errores en un bloque de try/catch. Además se debe de agregar un if para manejar el status que retorna el fetch. Por último, se tiene que cambiar el res.statusCode para que el servidor maneje internamente el error que ocurrió.

        static async getInitialProps({ query }) { let idChannel = query.id; try { let req = await fetch('https://api.audioboom.com/channels/recommended'); if(req.status >= 400) { res.statusCode = req.status; return { tatusCode: req.status } } //más código return { statusCode: 200 } } catch(e) { return { statusCode: 503} } }

        Para el manejo de errores Next.js nos da un componente llamado <Error/>.

        import Error from 'next/error';

        Luego, dentro del componente:

        const { statusCode } = this.props; if(statusCode !== 200) { return <Error statusCode={statusCode}/> }

        Pueden ver el resumen completo del curso aquí.
        Pueden ver mi lista de resúmenes aquí.

          Daniel Alberto Esquinazi

          Daniel Alberto Esquinazi

          student•
          hace 8 años

          recuerda que tienes q obtener el objeto res de los parametros

          static async getInitialProps({ res }) {
          Sergio Toshio Minei

          Sergio Toshio Minei

          student•
          hace 8 años

          muchas gracias por el dato @esquinazi 😃

        Matias Alejandro Lopez Heredia

        Matias Alejandro Lopez Heredia

        student•
        hace 6 años

        Se puede "catchear" errores de promesas de dos formas nativas en JavaScript.

        1. Seria usar try/catch como lo hicieron en esta lección.
        2. Otra seria usar .then().catch(), el then es una función que como parametro tiene el resultado correcto de la promesa, y el catch es lo mismo pero cuando la promesa tuvo un error.

        Ahora, fuera de lo nativo de JS, hay otras formas, una que particularmente me gusta es una biblioteca llamada "await-to-js", la pueden encontrar en el siguiente enlace: await-to-js Con esta library, envolvemos la promesa en una función llamada "to", y esta nos retorna un arreglo de dos objectos, en la posición 0 un objeto de error, si la promise salió mal, y en la posición 1, el objeto resultado de la respuesta correcta de la promise.

        import to from 'await-to-js' // Importan la library const [error, response] = await to(fetch(&quot;http://...&quot;)) // Envuelven la promesa

        Luego podrían manejar el error de la siguiente forma:

        if (error) { // Manejar el error return { statusCode: error.status } } // Usar el response para lo que sea nesecario, ya que no existe ningún error. // Por ej: return { data: response.data, statusCode: response.status }

        Espero les sirva :)

        Jose Galbis Soler

        Jose Galbis Soler

        student•
        hace 6 años

        No has vuelto a conectar el wifi! En el minuto 11.

        Diego Fernando Rojas Quintero

        Diego Fernando Rojas Quintero

        student•
        hace 6 años

        Alguien le a aparecido este mensaje: An unexpected error has occurred.

        No se que hacer para solucionarlo?

          Milton Fabricio Zuno Ley

          Milton Fabricio Zuno Ley

          student•
          hace 6 años

          A mi me aparece igual pero porque hay un problema con la api, la cual esta mal diseñada y te da dos veces el mismo dato de "POSTA", te entrega dos veces su id y al sacar el key que nos pide react nos manda otro errror que dice

          react-dom.development.js:88 Warning: Encountered two children with the same key, `4702115`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — the behavior is unsupported and could change in a future version.

          Para solucionar eso, tuve que hacer 2 validaciones, una especialmente para el statusCode 503 y otra para statusCode >= 400, mi codigo se ve asi.

          Channel.js

          if(statusCode == 503){ return <Error statusCode={statusCode} /> } if(statusCode >= 400){ return <Error statusCode={statusCode} /> }

          index.js

          if(statusCode == 503){ return <Error statusCode={statusCode} /> }```
        Agustín Castro

        Agustín Castro

        student•
        hace 8 años

        Hola!

        Como se gestionan los errores que capturamos en componentDidCatch por un componente?

        Leandro Videla

        Leandro Videla

        student•
        hace 7 años

        No entiendo porque seteamos a 200 el statusCode en caso de éxito. No sería correcto asignarle el valor del status del request ( req.status )?

        Si dejamos el código como lo vimos en la clase y tenemos un error de tipeo en la URL del Fetch nos tira un error horrible, mientras que si cambiamos el valor de statusCode a req.status no devuelve un error 404, que entiendo sería lo más correcto, ya que lo URL a la que le hacemos la petición no existe.

        Dejo acá mi código:

        static async getInitialProps({ res }) { try { let req = await fetch("https://api.audioboom.com/channels/recommended"); let { body: channels } = await req.json(); return { channels, statusCode: req.status }; } catch (error) { res.statusCode = 503; return { channels: null, statusCode: 503 }; } }
        Jorge Luis Montenegro

        Jorge Luis Montenegro

        student•
        hace 6 años

        Amigos, al realizar el ejemplo le cambien la url let req = await fetch('https://api.audioboom.com/channels/recommended'3) para que me aparesca el error pero se salta el catch y no presenta el error y se cae por undefine en el .map

          Francisco Imanol Suarez

          Francisco Imanol Suarez

          student•
          hace 6 años

          Hola puedes dar algún ejemplo de código? Dejaste el statusCode 503? Recuerda que este es un error de conectividad, por lo cual para entrar en el catch tendrías que cortar tu conexión a Internet. Intenta con un statusCode 404 te adjunto igual la documentación de Mozilla con todos los códigos de estado.

          Luis Lira

          Luis Lira

          student•
          hace 6 años

          Hola @george-montenegro, ¿podrías compartirnos tu código para poder ayudarte? tal vez la sentencia del try/catch tenga un error.

        Robinson Ganchala

        Robinson Ganchala

        student•
        hace 7 años

        @robertomgonzalez al quitar la red y desplazarme en el navegador hacia atrás y volver a channel me dice que res no está definido. La solución hardcodeada que he puesto es if (res) res.statusCode = 503 pero, ¿me puedes dar una solución mejor y explicarme a qué se debe ese error? Gracias.

          Fernanda Aragon

          Fernanda Aragon

          student•
          hace 7 años

          Hola, la variable res debe llegarte como parámetro desde la función getInitialProps({ res }), por si llega undifined podrías poner un valor default cuando llega como parámetro desde la función de la siguiente forma: getInitialProps({ res = {} }) y te ahorras en hacer esa validación con un if.

        Tobías Schwarz

        Tobías Schwarz

        student•
        hace 7 años

        La página de channels me queda en en blanco con el texto “An unexpected error has occurred” pero no tengo ningún error en la consola de next ni en la del navegador ni en la pestaña network del navegador

        Alejandro Robleto

        Alejandro Robleto

        student•
        hace 6 años

        wow este manejo de errores fue magico, con sinceridad hasta ahora me quedo mas claro como udarlos y manejarlo ademas de la buena teoria. fue magistral ..... gracias!!!

        Daniel Alberto Esquinazi

        Daniel Alberto Esquinazi

        student•
        hace 8 años

        No entendí por que solamente asignamos el status code a la respuesta en los casos de error, deberíamos asignarlos también en el caso de éxito? es decir

        res.StatusCode = 200

          Diego Forero

          Diego Forero

          Team Platzi•
          hace 8 años

          En este momento de la clase https://platzi.com/clases/next-js/concepto/navegacion-avanzada/gestionando-errores/material/?time=533 retorna el status code 200 si todo funciona y 503 si hay error de conexión por ejemplo.

          Daniel Alberto Esquinazi

          Daniel Alberto Esquinazi

          student•
          hace 8 años

          Gracias por la respuesta pero viendo la clase nuevamente pude escuchar que explica esto.En el caso de éxito el valor por defecto de res.statusCode es 200 y por eso es que no lo asigna.

          tiempo 8:15 aproximadamente

        Diego Fernando Berrio Meza

        Diego Fernando Berrio Meza

        student•
        hace 7 años

        Alerta de spoiler
        Presten atención

        Adriann Felipe Sanchez Sierra

        Adriann Felipe Sanchez Sierra

        student•
        hace 7 años

        No hay una forma de tener un componente que englobe todo y que éste tenga control sobre algún error generado sobre los componentes que estén dentro? Algo así como se realiza en el curso de React Native.

          Matias Martínez

          Matias Martínez

          student•
          hace 7 años

          Si mal no recuerdo hay un apartado en el curso de React que te enseña el manejo de errores. La verdad no tengo muy claro como funciona porque en la practica no lo eh usado.

          Saludos,
          Tito

        Carlos Andrés Cobo Sinisterra

        Carlos Andrés Cobo Sinisterra

        student•
        hace 7 años

        Hola mi gente, pregunta, podemos cambiar a diferentes idiomas los mensajes de error? o personalizar el texto usando el tag Error de next?

          Eduardo Hidalgo Díaz Rugama

          Eduardo Hidalgo Díaz Rugama

          student•
          hace 7 años

          No hay ningún tag de error en next, y no, no puedes poner varios idiomas para los mensajes de error. Al menos no como supongo que tu crees que se podría hacer.

          Para personalizar tu página de error en Next te recomiendo ir al curso de Next y ver esa sección. esta muy bien explicado. adicional:

          Para el idioma, debes usar alguna librería de internacionalización (i18n). Eso es un poco más complejo, pero se puede. Otra manera es que hagas tu propia librería de internacionalización.

          Para hacer tu propia librería necesitas 2 cosas:

          1. detectar el idioma en el navegador
          2. tener archivos (como json por ejemplo) donde almacenes las traducciones.

          entonces según el idioma que detectaste, haces que toda la aplicación consuma los textos del mismo idioma.

        Paul Alexander Rodriguez Calixto

        Paul Alexander Rodriguez Calixto

        student•
        hace 7 años

        iba a preguntar algo, pero sinceramente el profesor explica de forma tan sencilla que en la redaccion de la pregunta la respondi.... sos grande..!!

        Santiago Marcano

        Santiago Marcano

        student•
        hace 7 años

        Primero que nada agradecer por el curso!

        En el manejo de errores del Promise.all() si falla el fetch a los audio clips o a las series y no el channel la app tira error de undefined corriendo en entorno de desarrollo.

        Luego de un par de pruebas me di cuenta que, en produccion, por suerte, Next nos cubre la espalda y por defecto tira un error 500 si hay falla en alguna request. No es lo mas ideal en UX pero por lo menos no vemos un error chungo de código.

        Alguien propone alguna solución a eso? He estado intentado un par de cosas pero no he llegado a la solución de momento.

          Sergio Alejandro Trejo Cuxim

          Sergio Alejandro Trejo Cuxim

          student•
          hace 7 años

          Tengo una solución para ti. Añade un catch a cada petición, de modo que si uno falla regresará el "reject" y no se disparará en error global. Utilizo yo otro cliente HTTP, tu utiliza el fetch.

          const [ requestChannel, requestClips, requestChilds ] = await Promise.all([ request.get(`/channels/${idChannel}`, '').catch(error => error), request.get(`/channels/${idChannel}/audio_clips`, '').catch(error => error), request.get(`/channels/${idChannel}/child_channels`, '').catch(error => error) ]);
          Daniel Gaspar Chi Caballero

          Daniel Gaspar Chi Caballero

          student•
          hace 6 años

          Yo lo solucione de la siguiente manera:

          // En el if evaluamos si alguno de los tres requests // es mayor a 400 if ( reqChannel.status >= 400 || reqAudios.status >= 400 || reqChilds.status >= 400 ) { // El res.statusCode lo igualamos al valor mas // grande de los 3 res.statusCode = Math.max(reqChannel.status, reqAudios.status, reqChilds.status); // Finalmente en el return devolvemos el res.statusCode // como statusCode return { channel: null, audioClips: null, series: null, statusCode: res.statusCode, }; }```
        Juan Esteban Deossa Pertuz

        Juan Esteban Deossa Pertuz

        student•
        hace 6 años

        El manejo de errores es uno de los componentes mas importantes de todo desarrollo web, un buen manejo de errores le servirá tanto a los usuarios para guiarse mejor dentro del sitio web como para nosotros para ubicar el desarrollo web en una mejor posición en la web gracias al SEO.

        Roberto S. Sampayo

        Roberto S. Sampayo

        student•
        hace 6 años

        Chicos, me aparece este error:

        index.js:1 Warning: Can't perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in a useEffect cleanup function.

        ¿a que se debe y como lo soluciono?