El curso de Express. js: módulo 7: validación de Mongoose | Shivendra Raghuvanshi | Skillshare

Velocidad de reproducción


1.0x


  • 0.5x
  • 0.75x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

El curso de Express. js: módulo 7: validación de Mongoose

teacher avatar Shivendra Raghuvanshi, Lead Developer and Online Teacher

Ve esta clase y miles más

Obtenga acceso ilimitado a todas las clases
Clases enseñadas por líderes de la industria y profesionales activos
Los temas incluyen ilustración, diseño, fotografía y más

Ve esta clase y miles más

Obtenga acceso ilimitado a todas las clases
Clases enseñadas por líderes de la industria y profesionales activos
Los temas incluyen ilustración, diseño, fotografía y más

Lecciones en esta clase

    • 1.

      Introducción

      1:59

    • 2.

      Implementa la validación en Mongoose

      7:40

    • 3.

      Uso de validadores Mongoose integrados

      5:02

    • 4.

      Crea validadores personalizados en Mongoose

      3:16

    • 5.

      Manejo de errores de validación en Mongoose

      3:24

    • 6.

      Opciones de tipo de esquema y personalización en Mongoose

      5:36

    • 7.

      Reestructuración de nuestro proyecto FareWheels

      6:14

  • --
  • Nivel principiante
  • Nivel intermedio
  • Nivel avanzado
  • Todos los niveles

Generado por la comunidad

El nivel se determina según la opinión de la mayoría de los estudiantes que han dejado reseñas en esta clase. La recomendación del profesor o de la profesora se muestra hasta que se recopilen al menos 5 reseñas de estudiantes.

7

Estudiantes

--

Proyecto

Acerca de esta clase

Módulo 7: la validación de Mongoose te sumerge en uno de los aspectos más cruciales del desarrollo de backend: la validación de datos. En este módulo, aprenderás a garantizar la integridad y la confiabilidad de los datos de tu aplicación con Mongoose. Explorarás validadores integrados, crearás lógica de validación personalizada y manejarás los errores con gracia. Al final de este módulo, podrás implementar técnicas de validación robustas que mejoren la estabilidad de tu aplicación y la experiencia del usuario.

Lo que aprenderás

  • Cómo implementar la validación en esquemas de Mongoose para garantizar la integridad de los datos.
  • Usa los validadores integrados de Mongoose para aplicar restricciones.
  • Crea validadores personalizados adaptados a las necesidades específicas de tu aplicación.
  • Manejar y responder a los errores de validación de manera efectiva.
  • Personaliza las opciones de tipo de esquema para cumplir con los requisitos de datos.

También reestructuraremos la aplicación FareWheels para integrar estas técnicas de validación en escenarios del mundo real.

Conoce a tu profesor(a)

Teacher Profile Image

Shivendra Raghuvanshi

Lead Developer and Online Teacher

Profesor(a)
Level: All Levels

Valoración de la clase

¿Se cumplieron las expectativas?
    ¡Superadas!
  • 0%
  • 0%
  • Un poco
  • 0%
  • No realmente
  • 0%

¿Por qué unirse a Skillshare?

Mira las galardonadas Skillshare Originals

Cada clase tiene lecciones cortas y proyectos prácticos

Tu membresía apoya a los profesores de Skillshare

Aprende desde cualquier lugar

Ve clases sobre la marcha con la aplicación de Skillshare. Progresa en línea o descarga las clases para verlas en el avión, el metro o donde sea que aprendas mejor.

Transcripciones

1. Introducción: Bienvenido de nuevo al curso Express JS, Módulo siete, Validación Mangus Esta clase es una continuación de la serie de cursos Express JS. Mi nombre es Shawn Raganhi y estoy emocionado de guiarte a través de este módulo donde llevamos tus habilidades de espalda y desarrollo al siguiente nivel dominando la validación En este módulo, nos centraremos en la validación, un aspecto crucial de cualquier sistema backend robot Aprenderás a implementar la validación en mangos para asegurar la integridad de los datos Luego aprenderá a utilizar validadores integrados para una aplicación rápida y efectiva de restricciones, luego creará validadores personalizados adaptados a las necesidades específicas de la aplicación Después de eso, aprenderá a manejar y responder a los errores de validación con gracia, y finalmente, personalizar las opciones de esquema para una mayor flexibilidad y Este módulo es un cambio de juego para los desarrolladores que buscan crear aplicaciones confiables y escalables Al dominar la validación de Mongoose, escribirá un código libre de errores más limpio, reducirá los errores y se asegurará de que sus datos siempre sean consistentes y confiables Estas son algunas de las habilidades esenciales para construir APIs listas para la producción. En este módulo como proyecto, seguiremos construyendo la aplicación Fair Wheels. Primero, mejorará la API de la compañía reemplazando la matriz en memoria con Mongo DB Luego creará un APA de nuevo cliente, completo con operaciones completas de multitudes y validación. Este proyecto práctico solidificará su comprensión integrar la validación de Mongoose en aplicaciones del mundo real Este módulo está repleto de valiosas técnicas y experiencia práctica para ayudarte a construir mejores backends Así que vamos a sumergirnos y hacer brillar tus habilidades. Nos vemos en la primera conferencia. 2. Implementa la validación en Mongoose: I Entonces este es el esquema central que definimos anteriormente en la sección. Ahora por defecto, todas estas propiedades que aquí definimos, son opcionales. Entonces, si creo un curso y dejo fuera todas estas propiedades, entonces guardo el monedero en la base de datos, esa será operación perfectamente válida. Mongo DV no le importa que tengamos un curso que no tenga nombre o que no tenga precio Wen esta conferencia, te voy a mostrar cómo implementar la validación. Ahora para esta demo, sólo voy a hablar del validador requerido Pero tenemos más validadores incorporados de los que vas a conocer en la próxima conferencia Entonces hagamos que este nombre sea requerido. Primero, reemplazamos la cadena con un objeto aquí. Ponemos el tipo a string, y luego establecemos required, true. Con esto, si creo un curso sin nombre, así que entremos en esto. En su momento intento guardar este curso en la base de datos, voy a obtener una excepción. Déjame mostrarte. Entonces primero, volvamos al final de este archivo y eliminemos, eliminemos curso. Ahora entra haz, crea curso. Ahora de vuelta en la terminal, ejecutemos la aplicación. Bien. Mira lo que tenemos. Obtuvimos este error de variación. Si ves ese error, eso básicamente significa que no has manejado ese rechazo. Entonces solo para refrescar tu memoria, recuerda, las promesas pueden estar en tres estados. Inicialmente, están pendientes, luego pueden ser cumplidos o rechazados. En este caso, tenemos una promesa rechazada. Entonces no lo hemos manejado adecuadamente. Así que de vuelta en el código aquí, al guardar este curso en la base de datos, mira, el método save devuelve una promesa. Estamos esperando ahí para obtener el resultado. Entonces con esta implementación, sólo estamos asumiendo el escenario de éxito. Si se rechaza la promesa, no tenemos ningún código para manejar eso. Entonces antes, te dije que deberías poner este código en un bloque de caché tr. Entonces movamos esto aquí. Agrega el bloque de caché aquí, obtenemos una excepción, y luego podemos mostrar el mensaje de excepción en el canso Ahora, de vuelta a la terminal, ejecutemos la aplicación una vez más. Así que ya no nos avisamos. En cambio, obtenemos este mensaje de error. Fallo de validación de Forse, se requiere el nombre de ruta. Entonces, si tenemos un objeto de curso no válido, Mongoose no nos permite guardar el curso a través de la base Así que la validación entra automáticamente en el momento en que tratamos de guardar un curso a través de la base También podemos activar manualmente la validación. Permítanme comentar estas dos líneas. Este objeto de curso tiene un método de validación. Ahora bien este método de validar, mira, devuelve una promesa de vacío, para que podamos esperarlo. Y si nuestro curso no es válido, entonces obtendremos una excepción, y terminaremos en este bloque de caché. Así que volvamos al índice del nodo terminal que tiene, mira, tenemos el mismo error de validación. Se requiere el nombre de ruta. Ahora bien, una cosa que personalmente no me gusta del diseño de mangosta es que este método varidate conserva una promesa de vacío Entonces aquí no tenemos ningún resultado. Idalmente, este método de validación debería devolver un booleano. Entonces podríamos llamar a esto es válido. Y entonces si el curso no es válido, aquí podríamos tener alguna lógica. Entonces esto es un defecto de diseño y mangosta. Devuelve una promesa de vacío. Ahora, la única opción para obtener ese tipo de booleano es pasar una devolución de llamada aquí Entonces, en lugar de esperar la promesa, tenemos que volver al enfoque del pase de devolución Entonces aquí pasamos una función que toma un objeto de error, y luego podemos verificar si tenemos algún error. Entonces podemos ejecutar alguna lógica. Ahora podrías preguntar, ya tenemos aquí este bloque de caché. Entonces, si tenemos algún error de validación, podemos ejecutar ese tipo de lógica aquí. Eso es cierto, pero escribir código así es un poco desordenado Entonces espero que en algún momento del futuro, el equipo de Mongo cambie este método a Dana Ahora que a un lado, movamos este código y volvamos a nuestro código original. Una cosa que necesito aclarar aquí es que esta validación que implementamos en la propiedad name solo tiene sentido en mongoos A Mongo DB no le importa esta propiedad con nombre. Entonces, si hemos trabajado con bases de datos como SQL Server o MySQL, ya sabes que en estas bases de datos, podemos definir la validación a nivel de base de datos. Por ejemplo, en nuestra tabla de cursos, vamos a tener una columna de nombre y podemos marcar esa columna como requerida. Con eso, no podemos almacenar un curso sin el nombre en nuestra base de datos. En Mongo DB, no tenemos eso. A Mongo Dew no le importa ninguna de estas cosas. Entonces esta validación que hemos implementado aquí sólo tiene sentido en los mongoos En el momento en que tratamos de salvar un curso, mangosta ejecuta la lógica de validación Y si el curso no es válido, no lo guardará en la base de datos. Ahora, una última cosa que necesito aclarar aquí antes de terminar esta conferencia. Anteriormente en la sección sobre Express, les presenté un paquete de nada llamado Joy Entonces podrías estar preguntando cuándo tenemos dos tipos de validación. ¿Deberíamos usar Joy o deberíamos usar mangosta como validación? La respuesta es ambas. Este tipo de validaciones se complementan entre sí. Así que usamos la alegría en nuestras APIs de descanso. Utilizamos eso como primer ataque para asegurarnos los datos que nos está enviando el cliente sean datos válidos. Pero aún necesitamos este tipo de validación en mangos para asegurarnos de que los datos que guardamos en la base de datos estén en la forma correcta porque es posible que el cliente nos envíe un curso válido en el cuerpo de la solicitud Pero cuando creamos un objeto de curso en nuestro servicio SDDP, quizás nos olvidamos de establecer la propiedad name a lo que obtenemos de request dot body dot name Entonces, al hacer cumplir la validación en mangos, podemos asegurarnos de que errores de programación como este no den como resultado que los documentos no válidos sean persistidos en una base de datos Mongo A continuación, vamos a ver los errores válidos incorporados en los mangos 3. Uso de validadores Mongoose integrados: En la última conferencia, aprendimos sobre este validador requerido, que es uno de los validadores incorporados en mangos En esta conferencia, vamos a echar un vistazo más de cerca a estos validadores incorporados Entonces esta propiedad requerida aquí, podemos establecer eso en un booleano o una función que devuelve un Y esto es útil cuando quieres hacer condicionalmente tu propiedad requerida o no Por ejemplo, imaginemos que el precio solo se requiere si se publica el curso. Agreguemos aquí el validador requerido. Primero, reemplazamos el número por un objeto. Establezca el tipo aquí de nuevo en número. Y luego establecer requerido. Aquí, necesitamos pasar una función. Así funcionan. Y en esta función, devolvemos un booleano Por lo que devolvemos esto para hacer referencia a este curso objeto punto se publica. Entonces, si se publica es cierto, entonces se requerirá precio. Bien. Ahora aquí, necesito aclarar algo. En este caso particular, no podemos reemplazar esta función con una función de flecha. Es decir, si hacemos esto, nuestro validador no funcionará porque las funciones de flecha no tienen su propio esto Utilizan este valor del contexto de ejecución adjunto. En este caso particular, hay una función en algún lugar de mangosta que va a llamar a esta función Esta referencia que tenemos aquí hará referencia a esa función, no al objeto del curso que estamos tratando aquí. Así que tenemos que revertir esto de nuevo a una función regular. Ahora, vamos a probar esta validación. Así que aquí está nuestro objeto de curso. Voy a quitar el precio, y se puede ver que el curso está publicado. Entonces deberíamos obtener dos errores de validación. Ahora, de vuelta a la terminal, ejecutemos la aplicación. Mira, se requiere el precio de la ruta y también se requiere el nombre de la ruta. Ahora después, te mostraré cómo obtener mensajes de error individuales de esta excepción. Por ahora, apenas estamos recibiendo el mensaje como una simple cadena. Entonces este es nuestro validador requerido. Podemos establecer eso a un booleano simple o una función para hacer condicionalmente una Ahora, dependiendo del tipo de propiedades que tengamos aquí, tenemos validadores adicionales incorporados Por ejemplo, con cuerdas, también tenemos Longitud mínima y longitud máxima. Déjame mostrarte. Voy a descomponer esto. Aquí agregamos longitud mínima. Digamos que queremos asegurarnos de que al menos tenemos cinco caracteres. Aquí también podemos establecer la longitud máxima. Digamos 255 caracteres. También tenemos MT, y aquí podemos pasar una expresión regular. Ahora bien, en este caso particular no tiene sentido aplicar una expresión regular en el nombre de un curso. Entonces voy a encomiar esto. Otro validador útil que tenemos para cadenas es Enum. Voy a crear otra propiedad aquí. Llamemos a esa categoría. Y establece la cadena tipo dos. Ahora aquí, podemos usar el validador Enum. Ponemos esto en una matriz de cadenas válidas. Digamos que tenemos algunas categorías predefinidas, red móvil web, etc. Entonces a la hora de crear un curso, la categoría que establecemos debe ser uno de estos valores. De lo contrario, vamos a obtener un error de validación. Entonces déjame hacer esto requerido. Ahora volvamos a nuestro objeto curso. Vamos a agregar la categoría, y voy a configurar esto para que simplemente adjunte. Ahora vamos a traer de vuelta el nombre así como el precio. Por lo que sólo podemos ver el error de validación para la categoría. Así que de vuelta en el nodo terminal, indexado o persecución, mira, categoría no es un valor de enum válido para la categoría path Entonces estos son los validadores específicos de cadenas. Tenemos Min Land, longitud máxima, coincidencia para usar una expresión regular, y num. Para números, tenemos min y max. Entonces aquí, el precio es un número. Podemos establecer un mínimo de $10 y un máximo de $200. Y también tenemos estos dos validadores para fechas. En la siguiente conferencia, vas a aprender sobre validadores personalizados 4. Crea validadores personalizados en Mongoose: A veces los validadores incorporados en mango no nos dan el tipo de validación que necesitamos Por ejemplo, mira esta propiedad tags. Nuestra etiqueta es una matriz de cadenas. ¿Y si queremos hacer cumplir esta regla que cada núcleo debe tener al menos una etiqueta? No podemos usar el validador requerido porque con required, simplemente podemos pasar una matriz vacía, y eso será perfectamente válido para el punto de vista de Mangus Entonces aquí necesitamos un validador personalizado. Entonces primero, necesitamos reemplazar esto con un objeto para reemplazar esto por un objeto. Aquí establecemos el tipo a array. Ahora necesitamos definir un validador personalizado. Entonces aquí establecemos la propiedad válida a un objeto. En este objeto, tenemos una propiedad llamada validador, que establecemos en una función Esta función toma un argumento, que es la abreviatura de valor. Y aquí podemos implementar nuestra lógica de validación personalizada. Para que podamos devolver algo como esto. Si Galeno es mayor a cero, entonces esta propiedad será válida También podemos establecer un mensaje personalizado aquí. Entonces este objeto válido tiene otra propiedad que es message. Entonces mensaje, nosotros lo pusimos también. Un núcleo debe tener al menos una etiqueta. Ahora, vamos a probar esto. Así que de vuelta en nuestro objeto curso, primero, voy a establecer categoría a un valor válido, entonces web, luego voy a pasar una matriz mt. Así que de vuelta en el nodo terminal, indexado o tiene. Bien, mira, un núcleo debería tener al menos una excavación. ¿Y si excluimos esta propiedad así? Veamos qué pasa. Una vez más, nos llega el mismo mensaje. Un núcleo debe tener al menos una excavación. Entonces, si no establecemos esta propiedad porque definimos su tipo como una matriz, mangosta inicializará esto a una matriz vacía Ahora bien, ¿y si ponemos esto en nulo? Así que ahora de vuelta en la terminal. Bien, mira, no se puede leer la longitud de la propiedad de nub. Este no es el tipo de mensaje de validación que queremos recibir. Entonces necesitamos modificar nuestra lógica de validación a algo como esto. Si nosotros como valor y la propiedad de longitud es mayor a cero, y esta propiedad será válida. Así que de vuelta en la terminal, vamos a correr esto una vez más. Un núcleo debe tener al menos una etiqueta, hermosa. Entonces así es como se define un validador personalizado. Se establece la propiedad validate en un objeto. En este objeto, agrega esta función de validador, y de manera óptima, puede establecer un mensaje 5. Manejo de errores de validación en Mongoose: Hasta el momento, solo hemos mostrado un mensaje sencillo sobre nuestro error de validación. En esta conferencia, vamos a examinar este objeto de error con más detalle. Entonces esta excepción que obtenemos en el bloque de caché tiene una propiedad llamada errores. En este objeto, tenemos una propiedad separada para cada propiedad no válida en nuestro objeto de curso. Déjame mostrarte a lo que me refiero. Así que de vuelta en nuestro objeto curso, aquí están las propiedades de los puertos. Ahora mismo, aquí tenemos una propiedad no válida que es tag. Hagamos también de categoría una propiedad no válida. Voy a poner esto en un guión. Ahora con este objeto de errores que obtendremos tendrá dos propiedades. Uno es etiquetas, el otro es categoría. ¿Bien? Así podemos iterar para todas las propiedades en este objeto de error y obtener más detalles sobre cada error de validación Entonces para campo en error que errores, aquí hacemos un registro de consola. Vamos a R t errores, encontramos esa propiedad, obtenemos su valor. Ahora bien, este es un objeto de error de validación. Echemos un vistazo. Así que de vuelta en el nodo terminal punto índice Js, así que déjame desplazarme hacia arriba y ver qué está pasando aquí. Todo bien. Así que mira aquí, tenemos un objeto de error de validación. Este es el mensaje. Debajo de eso, tenemos el rastro de pila, ¿de acuerdo? Ahora, todo eso a un lado, estas son las propiedades que tenemos en la opción de error de validación. Entonces aquí tenemos una propiedad llamada propiedades, que nos da información sobre los requisitos de validación para esta propiedad. Entonces aquí tenemos acceso a nuestra función validador. Se puede ver el tipo de este validador es Enum. Estos son los valores de enumeración válidos para esta propiedad. A determina el nombre de nuestra propiedad, en este caso, categoría, y el valor es el valor actual. Entonces nuestro objeto de error de validación tiene propiedades y algunas otras propiedades. Uno es tipo, que se establece en Enum, y esto es básicamente un atajo al tipo de propiedades También tenemos otra ruta de propiedad corta, que se establece en categoría y valor, que es el valor actual para esta propiedad. Así que aquí estamos iterando sobre estos objetos de error de validación Y aquí tenemos múltiples errores de validación. Entonces esta es la primera. Y debajo de eso, mira, tenemos otro objeto de error de validación. Esto es para un núcleo debe tener al menos una etiqueta. Entonces si te desplazas hacia abajo, puedes ver el tipo de este error de validación es definido por el usuario porque aquí tenemos un validador personalizado La ruta son etiquetas, el valor actual es nulo. Entonces, si desea obtener el mensaje de error de validación para cada propiedad no válida, simplemente podemos acceder a esta propiedad de mensaje. Ahora, de vuelta a la terminal, volvamos a ejecutar la aplicación. Entonces tenemos dos mensajes de error de validación. Dash no es un valor de enumeración válido para la categoría de ruta, y aquí está el segundo error de validación para nuestra propiedad de texto 6. Opciones de tipo de esquema y personalización en Mongoose: Entonces, al definir un esquema, has aprendido que podemos establecer el tipo de una propiedad directamente aquí o usar un objeto de tipo esquema. Ahora bien, este objeto tiene algunas propiedades. Has aprendido de algunas de ellas. Conoces el tipo propiedad, conoces la enumeración requerida, y así sucesivamente En esta conferencia, vamos a ver algunas propiedades más útiles que están disponibles en estos objetos de tipo chema Entonces, para las cadenas, tenemos tres propiedades adicionales que puedes usar. Tenemos minúsculas. Podemos establecer eso en verdad. Y con esto, mangosta convertirá automáticamente el valor de esta propiedad de categoría a minúsculas Déjame mostrarte cómo funciona eso. De vuelta en nuestro curso objeto. Bien, primero, voy a eliminar este error de validación. Entonces cambiemos de categoría a web y notemos que aquí estoy usando una W mayúscula, ¿verdad? Voy a establecer etiquetas a, digamos, nt en ahora de vuelta aquí en los terminales de la aplicación. Bien, creamos un objeto de curso y lo guardamos en la base de datos. Ahora mira la categoría. Es web minúscula. Y si miras brújula, vamos a refrescar esta lista. Entonces aquí está nuestro nuevo documento. La categoría se establece en una web en minúscula. Entonces así es como funciona la propiedad en minúsculas. También tenemos mayúsculas. Nuevamente, podemos establecer eso en verdad. Ahora, técnicamente, deberíamos usar uno de estos, no los dos. Y por último, tenemos trim. Entonces, si tenemos remates alrededor de nuestra cuerda, mangosta eliminará automáticamente esos remates Por lo que estas tres propiedades están disponibles cuando se usan cadenas. Ahora tenemos un par de propiedades más en el objeto de tipo de esquema, y estas propiedades se pueden usar al definir cualquier propiedad independientemente de su tipo. Por ejemplo, volvamos a nuestra propiedad de precio. Digamos que siempre queremos redondear el valor del precio, así podemos definir un getter personalizado y un setter personalizado Así que llegar aquí pasamos una función de flecha que toma V o valor como argumento. Ahora podemos definir nuestra lógica personalizada o obtener este valor, así podemos aplicar matemáticas punto redondo alrededor de este valor. Ahora podemos definir de manera similar un conjunto personalizado. Y aquí pasamos una función similar. Así que vamos a matemáticas punto redondo de. Entonces cada vez que establecemos la propiedad price, se llamará al conjunto de función, y aquí redondearemos ese valor. Entonces con esto, si volvemos a nuestro objeto curso y fijamos el precio en 15.8, veamos qué pasa Así que de vuelta en la terminal, volvamos a ejecutar la aplicación. Mira, creamos un nuevo objeto grueso, y el precio se establece en 16. Así que aquí, cuando establecemos este valor se llamó a nuestro setter personalizado Y aquí redondeamos este valor. Ahora de vuelta en Compass, aquí está nuestro último documento del curso. Se puede ver que el precio está establecido en 16. Ahora vamos a editar esto. Se puede ver que el tipo de esta propiedad se establece Int 32, que es un entero. Voy a cambiar esto a doble y luego cambiar el valor 16-15 0.8 Y por último, haz clic en Actualizar para comprometer mis cambios. Entonces aquí, estoy simulando un escenario donde tenemos un documento que estaba almacenado en la base de datos antes de implementar esta lógica de redondeo En este caso, si lees estos cursos y luego accedes a la propiedad price, se llamará a nuestro getter personalizado Y aquí, redondearemos ese valor. Déjame mostrarte cómo funciona eso. Volvamos a nuestra función get courses. Anteriormente, implementamos esta lógica de paginación en la demo. No necesitamos eso. Entonces voy a comentar estas dos líneas, y luego voy a cambiar el objeto query para que podamos leer el curso en particular. Entonces queremos obtener el curso con ID establecido para copiar el valor de ese ID del curso. Así que de vuelta en Compass, aquí está nuestro ID de curso. Copia esto y pegarlo aquí. Aquí, vamos a obtener un curso para que podamos acceder al primer elemento de esta matriz. Ahora bien, si lee el precio de la propiedad, verá que se redondeará el valor de esta propiedad. Entonces aquí, vamos a leer el precio de la propiedad. Vamos a entrar en este curso de creación y llamar a obtener cursos. De vuelta en terminal. Ejecutemos la aplicación. Bien, mira, el precio es 16, aunque en la base de datos, lo almacenamos como 15.8 Así es como funcionan estos getters y setters personalizados. Se llama al setter cuando establecemos el valor de una propiedad como aquí, y se llama al getter cuando leemos el valor de una 7. Reestructuración de nuestro proyecto FareWheels: Todo bien. Así que aquí está nuestra aplicación justa de ruedas. Ahora bien, si miras el módulo del cliente, puedes ver aquí en la parte superior, estamos definiendo este modelo de cliente. Y por debajo de eso, tenemos nuestros manejadores de ruta. Entonces después de todos estos manejadores de ruta, tenemos esta función de validar cliente Entonces esta es una aplicación bastante simple. Y en este módulo, tenemos 85 líneas de código. Si nos fijamos en la definición del objeto del cliente o del modelo del cliente, este no es un modelo grande y complejo. En una aplicación del mundo real, nuestro modelo de cliente va a ser más complejo. Entonces el código en este módulo va a crecer, y eso es algo que debemos abordar en esta conferencia. Para mantener nuestras aplicaciones mantenidas, debemos asegurarnos de que cada módulo sea responsable de una sola cosa Ese es el principio de responsabilidad única en la práctica. En esta aplicación, este módulo de cliente que tenemos forma parte de la carpeta rutas. Entonces, técnicamente, todo lo que deberíamos tener en este módulo es una definición de la ruta de nuestro cliente. La definición de un objeto cliente no pertenece realmente a este módulo. Entonces en esta conferencia, vamos a extraer este código y ponerlo en otro lugar. Así que he creado esta carpeta de modelos. En esta carpeta, vamos a tener módulos como clientes Perros, perros compañía, y así sucesivamente. Así que agreguemos un nuevo filer, customer dot js. Ahora de vuelta en los clientes punto JS, voy a mover la definición del modelo de cliente dentro de nuestro nuevo modelo. Así que vamos a mover eso aquí. Ahora aquí, tenemos una dependencia a los mangos. Así que volvamos aquí arriba. Esta es la línea para cargar mangos. También necesitamos cargar I, como verán en un segundo. Ahora de vuelta en nuestro módulo de clientes, también voy a mover la función para validar a un cliente dentro de nuestro nuevo módulo Entonces y pegarlo aquí al final. Ahora tenemos el principio de responsabilidad única en la práctica. Nuestro módulo de cliente tiene todo el código para definir y validar un objeto cliente Sabe cómo debe ser un cliente. Nuestros clientes Módulo JS conoce todo sobre diversas rutas para trabajar con los clientes. Entonces aquí no tenemos ningún código sea manejar rutas expresas. ¿Bien? Eso significa que ya no necesitamos cargar alegría en este módulo porque validar un objeto cliente ahora es responsabilidad de este nuevo módulo, customer dot JS ¿Bien? Ahora, finalmente, al final de este módulo, necesitamos exportar esta clase de cliente así como esta función de validar cliente. Entonces escribimos módulo dot export. Agregamos cliente aquí en este objeto o una forma más corta es simplemente usar la propiedad de exportación. Antes, les dije que las exportaciones son referencia a las exportaciones de módulo punto. Así que simplemente podemos agregar propiedades adicionales en ese objeto. Del mismo modo, necesitamos exportar esta función de validación. Podemos acortar el nombre. Entonces, en lugar de validar al cliente, podemos usar validar y configuramos esto para validar al cliente. ¿Bien? Ahora de vuelta en nuestro antiguo módulo, aquí tenemos dos opciones. Una es cargar así el módulo del cliente. Así que cliente constante, configuramos esto para que requiera. Ahora aquí, tenemos que subir un nivel y luego ir a la carpeta de modelos y luego cargar el módulo de cliente. Entonces este módulo cliente, este objeto tiene dos propiedades. Uno es cliente, el otro es validar. Si cargamos este módulo cliente así, para hacer referencia al tipo de cliente o al modelo de cliente, tenemos que escribir módulo cliente punto cliente. Y se puede ver que esto se ve muy feo. Entonces un mejor enfoque es usar la desestructuración de objetos. Este objeto que se devuelve de cargar este módulo, sabes que tiene dos propiedades, cliente y validar. Podemos desestructurar ese objeto y cargarlo en estas dos constantes, cliente y validar Entonces ponemos las llaves aquí a la hora de definir estas constantes Y con esto, la constante del cliente se fijará a lo que se devuelva de este módulo. Mar. Bien. Por lo que no tenemos que repetir cliente en varios lugares. De igual manera, esta propiedad de validar se establecerá en lo que se devuelva de este módulo, validar. Ahora, finalmente, necesitamos reemplazar este cliente validado con palidate que es un nombre más corto y más limpio aquí hay otra referencia que necesitamos actualizar Así que valide. Ahora con este cambio, si nos fijamos en el número de líneas de código que tenemos en este módulo, miren, tenemos 54 líneas. Entonces inicialmente, teníamos más de 80 líneas de código, y ahora tenemos alrededor de 50 líneas de código. Como ejercicio, quiero que modifiques el módulo de la empresa. Entonces en rutas, aquí tenemos empresas. De igual manera, aquí en la parte superior, tenemos la definición del modelo de compañía. Quiero que extraigas este código y lo pongas en un módulo separado.