‫Instructor: Bienvenido de nuevo, ahora, antes de
‫profundizar en el manejo real de errores, primero escriba
‫un controlador para rutas no definidas.
‫Básicamente, para rutas que aún no asignamos
‫ningún controlador.
‫Y primero, debemos iniciar nuestra aplicación aquí, que
‫no cerramos después de la sesión de depuración reciente.
‫Entonces MPM comienza.
‫Y entonces esperemos una conexión a la base de datos.
‫Aquí está, así que vayamos ahora a Postman e intentemos encontrar
‫la ruta que aún no definimos.
‫Así que seguiré adelante, copiaré esta
‫URL aquí, de acuerdo, y
‫por ejemplo, digamos que
‫en lugar
‫de apiV1 tours, diríamos solo api / tours.
‫De acuerdo, en ese caso obtendríamos este resultado HTML, de
‫acuerdo, entonces Express envía automáticamente este
‫código HTML aquí, junto con un código de error 404
‫No encontrado en caso de que no haya
‫ningún controlador para la ruta que se solicitó, de acuerdo.
‫O, también podríamos simplemente escribir mal el tour aquí, por ejemplo.
‫Entonces, por ejemplo, en este caso
‫todavía obtendríamos el mismo error.
‫Ahora también hay otra situación que es
‫si aquí después de las giras especificamos algo más,
‫digamos algo como esto.
‫Entonces, echemos un vistazo al error que obtenemos,
‫y ahora obtenemos que la conversión a ID de objeto falló.
‫Y eso se debe a que
‫en realidad tenemos una ruta que acepta un parámetro de ID aquí después del recorrido /, ¿no?
‫Y entonces MongoDB básicamente está tratando de encontrar un
‫documento con este ID, pero no puede convertirlo en un ID de
‫objeto MongoDB válido, de acuerdo.
‫Nuevamente, esa es una situación diferente, sigamos trabajando con
‫esta, así que nuevamente, donde obtenemos este error,
‫pero en este formulario HTML.
‫Ahora que estamos haciendo una API aquí,
‫no tiene mucho sentido devolver HTML, correcto, así que ahora
‫arreglemos esto y básicamente creemos una función de manejo
‫para todas las rutas que nuestros enrutadores no almacenan en caché.
‫Bien, volvamos a nuestra aplicación aquí y
‫abramos la aplicación. js.
‫Bien, esa es básicamente la definición
‫de nuestra aplicación Express.
‫Ahora, antes de hacer cualquier
‫otra cosa, eliminemos este middleware que
‫ya no necesitamos.
‫Así que usamos esto aquí para demostrar
‫el concepto de middleware, por lo que en este punto
‫ya no lo necesitamos.
‫Muy bien ahora, ¿cómo vamos a implementar un controlador de
‫ruta para una ruta que no fue almacenada en caché por ninguno
‫de nuestros otros controladores de ruta?
‫Entonces, para hacer eso, recuerde que todas estas funciones
‫de middleware se ejecutan en el orden en que están en el código.
‫Entonces, la idea es que si tenemos una
‫solicitud que llega a este punto aquí de nuestro
‫código, entonces significa que ni
‫el tourRouter ni el userRouter pudieron almacenarlo en caché, de acuerdo.
‫Entonces, si agregamos un middleware aquí después de estos enrutadores, solo
‫se volverá a acceder si no lo maneja ninguno
‫de nuestros otros enrutadores, está bien.
‫Así que hagámoslo y luego entendamos realmente cómo funciona después
‫de que ya esté implementado.
‫Así que vamos a implementar un controlador de
‫ruta, entonces decimos app.
‫y ahora el método HTTP para el
‫que queremos especificar la ruta.
‫Ahora podríamos usar get here right, así como lo hicimos antes, pero
‫¿qué pasa con las solicitudes de publicación, eliminación
‫o revisión de solicitudes?
‫Entonces tendrías que escribir controladores para estos también,
‫y no queremos eso, simplemente queremos manejar
‫todas las rutas, así que todas las URL, para todos los verbos
‫aquí en este controlador, está bien.
‫Y entonces en Express, podemos usar app. todos.
‫Y entonces eso se ejecutará para todos los
‫verbos, así que todo el método HTTP, está bien.
‫A continuación, especificamos la URL, y dado que aquí
‫queremos manejar todas las URL que no se
‫manejaron antes, podemos usar la estrella aquí, que va
‫a representar todo, está bien, y luego el resto es
‫solo una función de middleware normal ,
‫justo como antes.
‫Así que
‫solicite, responda y luego.
‫Está bien, ¿y qué queremos hacer aquí?
‫Bueno, simplemente queremos enviar una
‫respuesta en formato JSON, no el HTML que tenemos ahora.
‫Entonces res. status,
‫y aquí establezcamos un 404, por lo que No
‫encontrado y luego una respuesta JSON, al igual que el habitual
‫donde configuramos el estado para fallar.
‫Entonces, solo una respuesta formateada adyacente regular.
‫Y luego algún tipo de mensaje aquí, y de
‫hecho hagamos una cadena de
‫plantilla aquí, porque quiero poner una variable allí.
‫Así que no puedo
‫encontrar.
‫Y luego podemos usar req. originalUrl está bien, así
‫que esa es una propiedad que tenemos en la
‫solicitud, que es como dice el nombre, la URL que se solicitó,
‫de acuerdo.
‫Entonces, esta nueva respuesta que
‫vamos a enviar ahora es mucho mejor
‫que el HTML que recibíamos anteriormente, así que ahora probemos eso.
‫Y, de hecho, ahora recibimos un mensaje de error JSON aquí.
‫Y aquí también obtenemos la URL que se solicitó,
‫y de hecho es la
‫que intentamos acceder, pero no está disponible, está bien, genial.
‫Ahora de nuevo, ¿por qué funcionó esto?
‫Entonces, nuevamente, la idea es que si podemos llegar a este punto
‫aquí, significa que el ciclo de respuesta a
‫la solicitud aún no ha
‫terminado en este punto de nuestro código, ¿verdad?
‫Porque recuerde que el middleware se agrega a la
‫pila de middleware en el orden en que
‫se define aquí en nuestro código.
‫Básicamente, este código aquí se ejecuta primero,
‫por lo que si la ruta coincidiera aquí
‫en nuestro tourRouter, nuestra solicitud nunca llegaría a este código,
‫por lo que no se ejecutaría.
‫Y esta debería ser básicamente la última
‫parte después de todas nuestras otras rutas, de acuerdo.
‫Y si lo fuera, solo
‫para probar esto, ahora coloque esto en
‫la parte superior de nuestra aplicación, entonces verá que
‫no importa qué solicitud hagamos, siempre obtendremos la misma respuesta.
‫Bien, probemos eso, y
‫de hecho ahora obtenemos un mensaje de error JS,
‫y eso es porque todas las
‫solicitudes ahora llegan a este controlador de ruta aquí, y
‫en realidad coincide porque es una solicitud GET, que es parte de todos los
‫verbos, correcto, y luego todas las rutas, por lo que todas las
‫URL se almacenan en caché aquí y, por
‫supuesto, maneja esa URL que acabamos de hacer aquí.
‫Y lo mismo, por supuesto, por ejemplo para eliminar un recorrido.
‫Entonces sucedería lo mismo, siempre
‫obtendríamos la misma respuesta, de
‫acuerdo.
‫Así que, por supuesto, volvamos a
‫ponerlo, pero esto fue solo para demostrar cómo y por qué
‫funciona, de acuerdo.
‫Genial, esta es una parte importante para hacer que nuestra API
‫sea un poco más fácil de usar, pero a continuación, comencemos
‫a aprender sobre el manejo de errores reales.