‫Instructor: En este video, hablemos de
‫algo que tenemos en node. js llamados rechazos no
‫controlados y luego aprendamos cómo podemos realmente manejarlos.
‫Entonces, en este punto, hemos manejado con éxito
‫los errores en
‫nuestra aplicación express pasando errores operativos asíncronos a un
‫middleware de manejo de errores global.
‫Esto, luego envía mensajes de error relevantes
‫al cliente dependiendo del tipo de error que ocurrió, ¿verdad?
‫Sin embargo, también pueden ocurrir errores fuera de express y un buen
‫ejemplo de eso en nuestra aplicación actual es la conexión
‫de base de datos mongodb.
‫Así que imagine que la base de datos está inactiva por alguna
‫razón o por alguna razón, no podemos iniciar sesión.
‫Y en ese caso, también hay
‫errores que tenemos que manejar.
‫Pero no ocurrieron dentro de nuestra aplicación express
‫y, por supuesto, nuestro controlador de errores que
‫implementamos no detectará estos errores, ¿verdad?
‫Entonces, solo para probar lo que sucede, sigamos
‫adelante y cambiemos nuestra contraseña de mongodb, ¿de acuerdo?
‫Porque de esa manera,
‫no podremos conectarnos a la base de datos, ¿verdad?
‫Entonces deberíamos obtener algún tipo de error, así
‫que vayamos aquí al archivo de
‫nuestro servidor y lo guardemos para recargar nuestro servidor,
‫aumentémoslo aquí, y de hecho,
‫aquí tenemos un rechazo de promesa no manejado.
‫Y ese es realmente el tema de este video.
‫Entonces, un rechazo de promesa no manejada significa que en algún lugar
‫de nuestro código, hay una promesa que fue rechazada.
‫Pero ese rechazo no se ha manejado en ningún lado, ¿de acuerdo?
‫Y aquí abajo, también verá una advertencia de desaprobación que dice
‫que en el futuro los rechazos no manejados
‫simplemente saldrán del programa de nodo que se está ejecutando, lo
‫que puede no ser siempre lo que desea, ¿de acuerdo?
‫Así que solucionemos este problema y
‫eliminemos este rechazo de promesa no manejado.
‫Ahora, en este simple ejemplo
‫aquí, sería
‫bastante fácil manejar ese rechazo, ¿verdad?
‫Todo lo que tendremos que hacer será
‫llegar aquí a este fragmento de código donde nuestra conexión está realmente hecha
‫y luego, agregar un controlador de captura allí, ¿verdad?
‫Así que un poco así, y luego
‫aquí, podríamos manejar ese rechazo
‫y entonces ya no obtendríamos este error.
‫Déjame mostrarte eso rápidamente.
‫Inténtelo de nuevo.
‫Y ahora, obtiene un error que es, por supuesto, el
‫resultado de este registro aquí, pero,
‫por supuesto, no obtenemos ningún rechazo de promesa
‫no manejada, nuevamente, porque en realidad lo manejamos aquí, ¿de acuerdo?
‫Así que esto funcionaría, por supuesto, pero realmente quiero mostrarles cómo
‫manejar globalmente las promesas rechazadas no manejadas, porque en una
‫aplicación más grande, puede volverse un poco más difícil
‫hacer un seguimiento de todas las promesas que podrían ser
‫rechazadas en algún momento. punto, ¿de acuerdo?
‫Entonces, en algún momento, es posible que tenga
‫algún rechazo de promesa no manejado en algún lugar, así que
‫permítame mostrarle cómo lidiar con eso a nivel mundial básicamente.
‫Y ahora aprendamos cómo manejar los rechazos no manejados y
‫lo haremos aquí mismo.
‫Y entonces recuerda cómo en una de las primeras
‫secciones del curso, hablamos sobre eventos
‫y oyentes de eventos, ¿verdad?
‫Y ahora, es el momento de utilizar ese conocimiento.
‫Entonces, cada vez que hay un rechazo
‫no controlado en algún lugar de nuestra aplicación, el
‫objeto de proceso emitirá un objeto llamado rechazo no
‫controlado y así podemos suscribirnos a ese evento de esta manera.
‫Así que procesa. encendido, recuerde, y luego el
‫nombre del evento, rechazo no controlado, y luego la
‫función de devolución de
‫llamada aquí recibe un error, así que sigamos adelante
‫y registremos el error en la consola.
‫Entonces usemos err. nombre y err. mensaje.
‫Entonces, estos son algunos valores predeterminados que tenemos
‫en todos los errores en node. js, ¿de acuerdo?
‫Bien, y después de guardar, ya tenemos aquí
‫el nombre del error y también el mensaje de error.
‫Tan mala autenticación que se debe a que, por supuesto,
‫tenemos la contraseña incorrecta.
‫Y ahora mismo, el rechazo de la promesa no
‫manejada ahora se maneja realmente.
‫Y, por supuesto, no solo el de esta conexión fallida,
‫sino cualquier otro rechazo de promesa que no podamos
‫detectar en algún lugar de la aplicación se maneja aquí en esta
‫final, llamémoslo red de seguridad, ¿de acuerdo?
‫Así que siempre tenemos que asumir que nosotros,
‫como programadores, cometeremos errores.
‫Entonces, siempre es mejor tener un lugar central como este para
‫manejar todos los rechazos de
‫promesas como una última red de seguridad, ¿de acuerdo?
‫Ahora, si realmente tenemos algún problema con
‫la conexión de la base de datos, como tenemos en
‫este ejemplo, entonces nuestra aplicación no funcionará en absoluto.
‫Entonces, todo lo que podemos
‫hacer aquí es cerrar nuestra aplicación, ¿de acuerdo?
‫Entonces, para cerrar la aplicación, usamos process. Salida.
‫Y de hecho ya lo usamos
‫antes en ese script donde importamos todos
‫los datos a la base de datos desde el archivo JSON, ¿recuerdas?
‫Así que procesa. salir y luego
‫aquí, podemos pasar un código.
‫Y el código cero representa un éxito
‫y el uno representa una excepción no detectada.
‫Y ese es el que generalmente se usa aquí, ¿de acuerdo?
‫Por lo general, siempre lo verá así.
‫Y agreguemos como un registro aquí, consola. log unhandler el
‫rechazo, algo como
‫esto.
‫Verá, me gusta mucho este, este de aquí.
‫Dejando que esto sea un nodo ...
‫No es realmente un usuario,
‫sino nuestro registro que estamos cerrando, ¿de acuerdo?
‫Y ahora, ves que la aplicación realmente se bloqueó.
‫Y eso se debe a este proceso. salir de aquí, ¿de acuerdo?
‫Ahora, solo hay un problema con la forma en
‫que lo implementamos en este
‫momento y es que la forma en que lo implementamos aquí
‫es tan simple como el proceso. salir es una forma
‫muy abrupta de finalizar el programa porque esto simplemente anulará
‫inmediatamente todas las solicitudes que todavía están en ejecución o pendientes
‫y, por lo tanto, puede que no sea una buena idea, ¿de acuerdo?
‫Y, por lo general, lo que hacemos es cerrar
‫correctamente donde primero cerramos el servidor
‫y solo entonces, cerramos la aplicación, ¿de acuerdo?
‫Entonces vamos...
‫Antes de hacer eso, necesitamos guardar
‫el servidor aquí básicamente en una variable, ¿de acuerdo?
‫Y así, el resultado de llamar a app. listen es un servidor y
‫ahora, en ese servidor, podemos decir servidor. close que, como dice el nombre,
‫cerrará el servidor y luego, una
‫vez hecho esto, ejecutará esta
‫función de devolución de llamada que le pasamos y, por lo
‫tanto, solo
‫está aquí, donde apagamos el servidor, ¿de acuerdo?
‫Y así, al hacer esto, al hacer server. cerrar, le damos
‫al servidor, básicamente, tiempo para finalizar todas las solicitudes que
‫aún están pendientes o en proceso en ese momento,
‫y solo después de eso, el servidor
‫básicamente se mata, ¿de acuerdo?
‫Entonces, cuando le demos
‫una caja fuerte, no se verá exactamente
‫igual porque, (risas) sí, somos los únicos que
‫realmente acceden a esta aplicación, pero en el escenario
‫del mundo real, siempre deberíamos hacerlo así, de acuerdo. ?
‫Y, por supuesto, no es realmente
‫ideal que la aplicación se bloquee, ¿verdad?
‫Porque en este momento, por supuesto, la aplicación no
‫se está ejecutando, no funciona en absoluto, ¿verdad?
‫Y, por lo general, en una aplicación de producción en un servidor web, generalmente
‫tendremos alguna herramienta que reinicia la aplicación
‫justo después de que falla, o también algunas de las plataformas
‫que albergan el nodo. js lo
‫hará automáticamente por su cuenta, ¿de acuerdo?
‫Porque, por supuesto, no queremos dejar la aplicación
‫colgando así para siempre.
‫Entonces eso tampoco es útil, ¿de acuerdo?
‫Básicamente, así es como
‫maneja las promesas rechazadas no manejadas.
‫Entonces, nuevamente, básicamente, estamos escuchando este evento
‫de rechazo no controlado, que luego nos permite
‫manejar todos los errores
‫que ocurren en el código
‫asincrónico que no fueron manejados previamente.
‫Pero ahora, podría preguntar, ¿qué pasa con el código síncrono?
‫¿Dónde vamos a manejar eso?
‫Y la respuesta a eso se encuentra, como puedes imaginar,
‫en el siguiente video.