NestJS para principiantes: crear una aplicación simple de blog con la autenticación avanzada | Aymen El Kani | Skillshare

Velocidad de reproducción


1.0x


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

NestJS para principiantes: crear una aplicación simple de blog con la autenticación avanzada

teacher avatar Aymen El Kani, software engineer

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.

      Nestjs para principiantes: curso

      2:53

    • 2.

      ¡Genera tu primer proyecto de Nestjs!

      12:24

    • 3.

      Preparación de mongoose

      8:46

    • 4.

      Diseñar e implementar el esquema de blog

      7:39

    • 5.

      Creación de un servicio de blog

      11:04

    • 6.

      Creación de un controlador de blog

      4:56

    • 7.

      Creación de un controlador de blog

      9:06

    • 8.

      Poner a prueba el componente de blog

      7:17

    • 9.

      Diseñar e implementar el esquema de usuarios

      3:48

    • 10.

      Creación de un servicio de usuario

      8:48

    • 11.

      Creación de un controlador de usuario

      3:15

    • 12.

      Implementación de autenticación con Auth Guards

      12:39

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

20

Estudiantes

1

Proyecto

Acerca de esta clase

¿Estás interesado en aprender a crear un back-end escalable, mantenido y seguro para tus aplicaciones web? Si es así, ¡entonces este curso es para ti!

En este curso, empezaremos por cubrir los conceptos básicos de NestJS, un poderoso marco construido sobre Node.js. Aprenderás a usar NestJS para crear una API RESTful, empezando por crear un nuevo proyecto de NestJS y luego crear una sencilla aplicación de blog con MongoDB y Mongoose.

Luego profundizaremos en el tema de la autenticación y la seguridad, donde cubriremos a guardias con los tokens web de JSON (JWT). Aprenderás a implementar un sistema de autenticación que mantenga los datos de tus usuarios y a manejar las solicitudes autenticadas en tu API.

A lo largo de todo el curso, obtendrás experiencia práctica en crear y probar tus propias aplicaciones de NestJS, con un enfoque en crear una aplicación simple de blog que puedas personalizar y desarrollar para tus propios proyectos.

Al final de este curso, tendrás una comprensión sólida de NestJS, Mongoose, guardias de la autora con JWT y cómo crear aplicaciones web escalables, mantenidas y seguras Entonces, ¿por qué esperar? ¡Únete a nosotros hoy y comienza a crear tus propias aplicaciones de NestJS!

Conoce a tu profesor(a)

Teacher Profile Image

Aymen El Kani

software engineer

Profesor(a)
Level: Beginner

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. Nestjs para principiantes: curso: Hola y bienvenidos a mi curso sobre STS, un framework progresivo Node JS para construir aplicaciones web eficientes y escalables. Ses es un framework que combina lo mejor de ambos mundos, la potencia y flexibilidad de los nodos, sí, con la elegancia y sencillez de TypeScript. Eso sí, te proporciona un modelador en realidad dependencia tectorial, inyección, manejo de excepciones, utilidades de prueba y mucho más. En este curso, aprenderás a usar menos solo para crear una aplicación de blog con autenticación usando celular off guard Mongoose. También aprenderás a configurar tu entorno de desarrollo e instalar un STS. Crear controladores, servicios, módulos, guardias y decoradores. Utilice la CLI de nidos para generar código y ejecutar comandos. Conéctese a una base de datos MongoDB usando Mongoose, los esquemas finos, Modelos, interfaces y videos, y siendo operaciones codificadas para publicaciones de blog y acciones de usuario. seguridad o los endpoints con autenticación JWT y guardias manejan errores y excepciones con gracia. Este curso está diseñado para principiantes que quieran comenzar con un SES o mejorar sus habilidades existentes. No necesitas ninguna experiencia previa con un STS, pero debes tener algunos conocimientos básicos de Node.JS, JavaScript y un poco de TypeScript. Por cierto, si quieres aprender más sobre NodeJS y TypeScript, tengo otro curso de escultura, cubre todo lo que necesitas saber sobre. Observe que el curso aprenderá a usar NodeJS para crear ojos API RESTful, aplicaciones en tiempo real, servidores GraphQL y más. También aprenderás a usar algunos de los frameworks y bibliotecas más populares que funcionan con nodos, sí, como explícitamente como Mongoose, socket IO type ramp plus validator y más. Ese curso fue diseñado para prepararte para usar Nes Yes, y darte una base sólida de habilidades para las náuseas. Entonces, si estás interesado en aprender náuseas, dolor, mejorar tus habilidades existentes, te recomiendo encarecidamente que consultes mi otro curso sobre Skillshare. Ahora bien, esta puntuación en pocas palabras está estructurada una manera particular que sigue las mejores prácticas de desarrollo web. Su sección cubre un tema específico con explicaciones claras, ejemplos y ejercicios. También puedes descargar el código fuente de cada sección y seguirlo. También tendrás acceso a una comunidad amigable y solidaria de compañeros e instructores en Skillshare que están listos para ayudarte cuando tengas preguntas o dudas. Entonces, ¿a qué estamos esperando? Inscribirse ahora y comenzar a aprender NES ayer. 2. ¡Genera tu primer proyecto de Nestjs!: Bienvenido al primer capítulo del módulo de loudness js. En este capítulo, vamos a sumergirnos en el apasionante mundo de Nicias y aprender a crear una sencilla aplicación de blog con autenticación. Estoy dentro del sitio web eficiente de SES. Siéntase libre de echar un vistazo a su alrededor y explorar la humedad que sí tiene para ofrecer. Sin embargo, no se preocupe si se siente abrumado porque en este módulo, estamos brindando toda la información que necesita para comenzar con Nestea estará cubriendo lo básico y construyendo una aplicación del mundo real. Podemos empezar a usar Nicias con confianza. Ahora, ¿qué sigue? Sí. Lets us es un framework que se construye sobre el popular framework CS extra para NodeJS. Pero a diferencia de express, JS proporciona una estructura más modular y escalable para su aplicación, también incorpora muchas de las mejores prácticas y patrones de diseño utilizados en Angular. No es necesario tener ningún conocimiento previo de Angular para entender STS. Y de hecho, los proyectos que construimos juntos en el módulo anterior usando Node.JS expresado en TypeScript, ya te han dado una muestra de cómo esta estructura amarilla es sus aplicaciones. En este módulo, profundizaremos en un STS y cómo se puede usar para construir aplicaciones escalables y mantenibles. También utiliza la potencia de TypeScript y la última arquitectura Angular para hacer que construcción de aplicaciones del lado del servidor más eficiente y agradable. Y este módulo, estaremos usando la CLI, o Interfaz de Línea de Comandos, que es una herramienta increíble que nos permite generar fácilmente un nuevo proyecto con todos los archivos y directorios necesarios para comenzar. Ahora, antes de entender esto, sí. Cli instalado PMPM be npm es un administrador de paquetes eficiente de espacio en disco rápido para Nokias. Ahorra espacio en tu disco y asegúrate no perder el tiempo en instalación y mantenimiento. El APM también está disponible en Windows, Linux y Mac. Para detener el NPM, necesitará tener instalado NPM o Yarn en su sistema. Una vez que tengas instalado uno de estos Package Manager, sigue adelante y abre tu terminal, entonces puedes ejecutar el siguiente comando. Si estás dentro de Linux, usarás npm. Instala ese C, P y B F. Pero si estás en ventanas laterales como yo, tienes que usar hilo en eso Ella no detiene PMPM como paquete global, entonces P NPM. Bien, después de eso, puede instalar la CLI de Azure ejecutando el comando npm. Agrega eso G. Entonces vamos a vernos. Cli, tengo tanto BI como BPM y SES amarillo ya instalados. Entonces, una vez que la instalación esté completa en su sitio, podemos usar el CLI para generar un nuevo proyecto. Vamos a llamarlo blog sí tiene que hacer esto. Ejecutaremos el nido de comando, luego enchufa el tablero. Como puedes ver, podemos acceder a la CLI de Azure con el nombre nest y luego usar la nueva etiqueta para generar un nuevo proyecto de app de blog. Ahora pulsa Enter. Vamos a solo CLI te solicitará que elijas entre estos tres gestores de paquetes. Entonces, si instalaste PMPM como yo, puedes elegir PMPM, seleccionar el NPM y luego presionar Enter. Pero si no lo hiciste, puedes elegir entre NPM o Yarn. Ya lo hice. Entonces, cuando termines, tendrás un nuevo proyecto de SES listo para usar dentro de una aplicación de guión de blog. Entonces, en la raíz de nuestro proyecto, encontrarás varios archivos de configuración que son comunes a la mayoría de los proyectos. Estos archivos contienen información importante sobre nuestro proyecto. Eso dice dependencias y guiones dentro de la bolsa es Jason. Pero uno de los consejos más importantes es el error de pelusa ES. Ver, este archivo se utiliza para configurar las reglas de linting para nuestro proyecto. Nos ayuda a mantener nuestro código limpio y mantenible asegurándonos de seguir las mejores prácticas y estándares. Por eso te recomiendo encarecidamente que instales una extensión con el nombre ES lint side tu VSCode. Con esta sección, obtendrás comentarios en tiempo real y sugerencias sobre cómo mejorar tu código. Así que adelante e instala AS y extensión lateral tu VSCode. Bien, volvamos al proyecto. También notarás una carpeta de prueba y la raíz del proyecto. Esta carpeta contiene dos archivos importantes, el archivo adyacente y el archivo txt dot spec app. Así que solo el archivo JSON es un archivo de configuración para solo un popular framework de pruebas para proyectos JavaScript. Establece el entorno de pruebas para tu nido sí. Aplicación. Sí. Y para la especificación superior, el archivo ts, este es un ejemplo de una prueba de extremo a extremo para su aplicación. Por lo que se utilizan pruebas de extremo a extremo para probar la caída del imperio de su aplicación de principio a fin para garantizar que todo funcione correctamente. Ahora el resumen, el archivo ts plaga la respuesta del punto final raíz de su aplicación. Utiliza la biblioteca de pruebas de soporte para enviar una solicitud a la aplicación y probar la respuesta. Esta es una excelente manera de garantizar que su aplicación funcione como se esperaba y detectar cualquier problema al principio del proceso de desarrollo. En general, la carpeta de prueba y los archivos en su interior juegan un papel crucial para garantizar la calidad y confiabilidad de su Nestea, esta aplicación. Ahora volvamos al archivo package.json. Aquí podemos ver varios scripts o comandos escritos que podemos usar para ejecutar y administrar nuestra aplicación. Estos scripts hacen que nuestro proceso de desarrollo sea mucho más fácil y más simplificado. Algunos de los guiones más importantes incluyen el script de inicio. Este comando se utiliza para iniciar la aplicación en modo de desarrollo. Cuando ejecutamos npm, npm soso comenzando a terminal, compilará e iniciará la aplicación en el puerto especificado. Sí, pero prefiero, o todos los desarrolladores prefieren ejecutar estos start calling sí, porque este comando aquí contendrá la etiqueta de reloj dados dados dados que nos permite ejecutar la aplicación y lo que cambia al mismo tiempo. Ahora tenemos también el script de compilación. Este script se utiliza para compilar y construir la aplicación en modo de producción. versión compilada de la aplicación estará lista para ser implementada. Y vamos a conseguir esta carpeta dentro del directorio de nuestro proyecto. También tenemos el script de prueba. Estamos usando el script para ejecutar los casos de prueba para la aplicación. Podemos usarlo para asegurarnos de que nuestra aplicación funcione como se esperaba antes de implementarla. Y el tal vez un nuevo comando para nosotros es el comando lint. Este comando se utiliza para ejecutar el proceso de linting en nuestro código. Linting nos ayuda a mantener el estilo de código del ecosistema y nos ayuda a evitar errores comunes de codificación. Y hablemos del formato o Comando. Este comando, el formato se utiliza para formatear nuestro código de acuerdo con las reglas especificadas en las configuraciones de linting dentro del archivo US land ARC GIS. Puedes jugar con estas configuraciones como desees. Pero las configuraciones predeterminadas proporcionadas por un STS son más que suficientes. Sí, así que vamos a cerrar esto. Y en general, estas tiras dentro del archivo adyacente más grande o muy útiles para automatizar el proceso de desarrollo y facilitarnos la gestión de nuestra aplicación. Es importante entender lo que protagoniza cada uno de estos guiones y cómo podemos usarlos a nuestro favor. Bien, ahora vamos a ir a la carpeta SRC y repasar cada archivo dentro de esta carpeta y explicar el propósito de la misma. Tenemos el archivo main.js. Este es el punto de entrada de nuestra aplicación. Crea una instancia de la aplicación y comienza a escuchar el puerto especificado. También tenemos el módulo app dot que tiene archivo. Este es un modelo que agrupa a todos los controladores, servicios, vibraciones y más y un techo. Es similar al concepto de módulos en Angular. También tenemos la app dot controller.js. Aquí es donde definimos nuestras rutas y manejamos las solicitudes entrantes. Utiliza el mayor es como GET o post, que no se les da a app.get o secuestra post en expresado. La clase de controlador en SES es responsable definir los puntos finales y manejar las solicitudes HTTP entrantes. Su método dentro del controlador representa una ruta en su aplicación. Los métodos pueden manejar diferentes tipos de solicitudes como GET, post, PUT, delete, etcétera. Esto se hace con la ayuda de decoradores todavía, como la categoría posterior, que equivale al método get en Express. Ahora tenemos también al curador controlador. Esto se utiliza para identificar la clase como controlador. Esto es importante porque nos permite saber que esta clase debe manejar las solicitudes HTTP entrantes. Bien, pasemos al archivo services.js de secuestros. Ahora bien, aquí es donde ponemos nuestra lógica de negocio. Es un gran lugar para poner cualquier consulta de base de datos u otra lógica compleja que nuestros controladores necesiten usar. Tenemos el inyectable, mayor se usa esto para identificar clases que se pueden inyectar como dependencias en otras clases. En nuestro ejemplo, tenemos el App Service esa clase sí, que está marcada como inyectable. Esto sí significa que se puede usar como dependencia en otras partes de nuestra aplicación, podemos inyectar el vidrio App Service en el controlador usando el decorador inyectable y luego llamar al método get's hello desde la clase App Service dentro nuestro control, como puedes ver aquí. Ahora bien, esta es una forma poderosa administrar dependencias en tu aplicación, facilitando la prueba y el mantenimiento tu abrigo organizando tu código de esta manera, puedes asegurarte de que tu controlador se esté enfocando en manejar las solicitudes entrantes. Por qué son los observadores clase se puede utilizar para manejar la lógica más compleja. Ahora mismo que hemos configurado la estructura del proyecto, ejecutemos el servidor y verifiquemos el navegador para ver la respuesta del enrutador hello world. Para ello, ejecutamos el comando npm run start, site, nuestro terminal, o PMPM porque nosotros, lo hemos instalado. Así que sé npm, corre, empieza a caer, muerte y golpea Enter. Por supuesto, necesitamos navegar a un blog que esté arriba. Y luego unir el comando una vez más, ser npm run empezar a entrar ahí. Bien, si obtienes esta última línea aquí, aplicación se inició con éxito, significa que has iniciado tu aplicación con éxito. Ahora sigamos adelante y abramos el navegador y probemos para el mundo hola sobre una respuesta. Aquí, naveguemos hasta localhost mil y esperemos la respuesta. Y aquí vamos, la cadena Hello World. Ahora podría preguntarse cómo lo hicimos, aunque dentro del controlador. Déjame colapsar esto, este router aquí, este método representa el punto final raíz de nuestra API. Puedo cambiar esto agregando una cadena dentro del decorador get así, por ejemplo hola. Entonces guarda. De esta manera. Vamos a conseguir la cadena Hello World dentro de la ruta hello. Volvamos al navegador. Permítanme navegar primero a la raíz y al punto de aplicación. Puedes ver que no podemos obtener el punto final raíz de nuestra API. Y eso es porque lo cambiamos a Hola. Como pueden ver, esto es muy sencillo por la ayuda de las motoniveladoras que están dentro de las redes. Sí. Ahora, hemos instalado con éxito en unidades sí, Proyecto. Y tenemos una comprensión básica de su estructura y principales peleas. En el siguiente capítulo, profundizaremos en los controladores y servicios y modales y cómo usarlos correctamente. 3. Preparación de mongoose: Hola a todos. En este video, comenzaremos con un proyecto bastante estructurado que encontrarás en la sección de recursos. Así que adelante, descárgalo y ábrelo dentro de tu VSCode. Es importante tomar un momento para entender la estructura de nuestro proyecto y por qué lo hemos dividido en componentes más pequeños. Nuestra aplicación está organizada en cuatro directorios principales, el directorio de aplicaciones, y en su interior el autor, blog, usuario final. Cada uno de estos directorios contiene un conjunto de componentes con un rol específico. Ahora el directorio de aplicaciones es el directorio principal para estos tres componentes. Y contiene el modelo de punto app, el archivo ts. Pero no vamos a trabajar con esto en este momento. Pero cada uno de estos directorios contiene un conjunto de componentes con un rol específico. Estos componentes se dividen además en controladores, servicios y grasas de esquema. Pero el directorio está vacío por ahora porque vamos a agregar unos archivos y configuraciones muy específicos a través de él. Sí, pero ahora vamos a trabajar sólo con estos dos componentes, el blog y el usuario. Por lo que esta estructura nos ayuda a administrar y mantener el código de manera más efectiva, además de facilitar la escala de la aplicación. Al igual que cuando agregamos nuevos componentes o expandimos los existentes, no afectan al resto del sistema. Adicionalmente, este detector desacopló diferentes partes de nuestra aplicación, haciéndola menos dependiente los detalles de implementación de otras partes. Y por último, la organización de archivos estructurados facilita a los desarrolladores comprender las diferentes partes de nuestra aplicación, cómo encajan y cómo funciona todo el sistema, lo que lo convierte en la mejor práctica a seguir en el desarrollo de SDS. Ahora, en resumen, nuestra estructura de proyecto da como resultado una mejor escalabilidad de administración de código para hacer frente al enlace, y más fácil para comprender el diseño general del sistema. Bien, ahora en este proyecto, usaremos MongoDB como nuestra base de datos para almacenar nuestras publicaciones de blog e información de usuario. Trabajamos con MongoDB y honesto sí proyecto. Usaremos la popular biblioteca de modelado de objetos MongoDB , Mongoose. Mongoose proporciona una solución simple y elegante para definir esquemas, validar datos y consultar la base de datos MongoDB con Mongoose podrá interactuar fácilmente con nuestra base de datos MongoDB y modelar nuestros datos una manera que tenga sentido para nuestra aplicación. Así que comencemos e integremos uno va a nuestro proyecto. Primero, navegaremos hasta el sitio web MongoDB others para actualizar nuestro URI MongoDB. Entonces aquí, si no tienes una cuenta, puedes hacer clic en este botón de unidad para EE y crear una nueva cuenta. O si tienes una cuenta solo tienes que iniciar sesión en la sección de clústeres. Si eres nuevo en MongoDB, puedes crear un nuevo clúster usando este botón y luego elegir el clúster compartido para obtener un plan gratuito y luego crear el clúster haciendo clic en este botón. Una vez que hayas terminado De eso, vuelve a la sección de clústeres y haz clic en Conectar, y luego conecta tu aplicación. Y este es el URI de MongoDB. Vamos a usar este URI para conectar nuestro proyecto ECS a la base de datos MongoDB. Asegúrate de no seleccionar ningún GS aquí. Y la última versión de NodeJS. Bien, ahora vamos a copiar esto. Y luego volvamos al código VS. Y dentro del archivo, encontrarás una variable URI MongoDB. Adelante y pega nuestro URI ahí. Y luego vamos a cambiar la contraseña con la contraseña real de nuestra cuenta. Entonces si ya tienes tu contraseña, puedes ponerla aquí. Si no guardó la contraseña, puede volver a MongoDB Atlas que cerrar esto y acceder a la base de datos. Y luego haz clic en Editar en tu cuenta, luego haz clic en Editar contraseña. Y luego aquí podemos generar una nueva contraseña haciendo clic en el botón de generación automática de contraseña segura. Entonces voy a hacer eso. Voy a copiar esto. Y luego asegúrate de tomar un usuario de actualización. Y luego volver al código VS. Adelante y básicamente contraseña ahí y luego guarda el m5. A continuación vamos a abrir la terminal. Y luego vamos a instalar Mongoose. Ejecutemos el comando PMPM, luego mangosta. Y porque estamos usando esto, sí, vamos a instalar Mongoose. Este módulo nos va a proporcionar un conjunto de decoradores y otras útiles funciones de utilidad para trabajar con MongoDB. Presiona Enter y espera la instalación. Una vez que tengamos nuestros módulos e instalados, seguiremos adelante e importarlo a nuestro modelo adulto, el archivo ts, cerraremos la terminal y aquí arriba, eso es M4. Y luego dentro de la matriz imports aquí, vamos a importar el módulo mangosta y usarlo en nuestro proyecto llamando al módulo mangosta punto para el método root. Entonces sigamos adelante y escribamos el módulo cuatro de mangosta. Y dentro de este método, vamos a agregar el URI MongoDB de proceso. Subrayado de Mongo DB. Pero para poder acceder al imperio, necesitamos usar el servicio de configuración proporcionado por nest. Sí, tenemos que instalarlo primero. Así que adelante y vuelve a abrir el lado terminal aquí, usa el npm y luego agrega. Eso dice Guardar para guardar como dependencia dev, el Nest CSF. Después modo config. Pulsa Enter, espera la instalación. Bien, una vez completada la instalación, podemos importar el módulo config dentro del módulo app y controlar su comportamiento, el método cuatro root. Entonces sigamos adelante paso a paso e importemos. Ahora, vamos a poner esto dentro de la matriz. Adelante y agrega una coma. Y entonces aquí, derecho, config módulo cuatro root. Y este método aceptará un objeto de propiedades. La primera propiedad es global. Esta propiedad, va a decirle al módulo de configuración que haga que el archivo m esté disponible globalmente dentro de nuestra aplicación. La segunda propiedad es la ruta del archivo. Ahora, agreguemos el archivo punto así. Entonces me acaban de agregar el nombre. En este caso, nos estamos refiriendo al directorio raíz de nuestro proyecto. Y el modelo de conflicto va a buscar ese archivo dentro del directorio raíz. Bien, ahora puedes agregar varios archivos agregando una matriz. Y entonces si tienes como no int y otro archivo int, como tal vez, no sé nada. Puedes agregarlo así como una matriz. Pero para nosotros, sólo tenemos un expediente, así que mantengámoslo así. Ahora como puedes ver, la clase modal config es una poderosa herramienta que nos permite acceder a la variable de entorno globalmente en nuestro proyecto. Lo hace mediante el uso del módulo de configuración para el método de arranque, podemos configurar fácilmente el módulo para que las variables de entorno almacenadas en el archivo punto M sean accesibles en toda la aplicación. Esto significa que no tenemos que amperiar manualmente el archivo punto M en cada módulo o componente que necesite acceder a estas variables. En su lugar, podemos simplemente usar el servicio de configuración para acceder a las variables de entorno desde cualquier lugar de nuestra aplicación. Esto hace que sea mucho más fácil administrar nuestra configuración y mantener un entorno consistente en todas las partes de nuestra aplicación. Bien, ahora hemos terminado de configurar Mongoose y estamos todos preparados para comenzar a trabajar en nuestra aplicación. Entonces en el siguiente video, vamos a crear nuestro esquema de blog. Aparte del esquema de puntos del blog, el archivo ts que usa Mongoose lo hizo en los proyectos anteriores, pero esta vez va a ser ligeramente diferente porque estamos usando nest. Sí. Entonces nos vemos ahí. 4. Diseñar e implementar el esquema de blog: En este video, crearemos el esquema de blog en nuestro proyecto nest yes. Comenzaremos abriendo el directorio de componentes sanguíneos y luego bloquean el esquema al archivo ts. Dentro de este archivo, Empecemos exportando una nueva clase y ponerle un nombre bloqueado. Dentro de esta clase agregaremos dos propiedades, title of type string y content of type string. Ahora tenemos algunas áreas aquí viniendo de ES y todo lo que tienes que hacer es guardar el archivo. Si los errores no desaparecieron automáticamente, puedes ir a Archivo y preferencias que ajustes y buscar ES lint. Desplázate hacia abajo y asegúrate de habilitar ES y como formateador para tu VSCode. Y luego desplazarse hacia arriba en ajustes de Jason. Y luego asegúrate de copiar todas estas líneas para citar tu configuración, el archivo adyacente, luego cierra. Esto. Aún así no funcionó para ti. Asegúrese de tener LLF como secuencia de fin de línea. Tu VS, VSCode. Puedes cambiarlo desde aquí, pero esto volverá al valor predeterminado como LLF cuando vuelvas a abrir VSCode para obtener. Entonces para que esto sea permanente, puedes volver a la configuración y luego buscar fin de línea. Desplázate hacia abajo y asegúrate elegir la barra diagonal n como el carácter de fin de línea. Entonces cierra esta prueba nuevamente el archivo, si aún tiene algunos errores, vuelve a RRC más guapa y agrega final de línea igual L F. Ahora bien, esta es toda la configuración requerida para tener higos autos en Guardar con ES. Y ahora volvamos a nuestro esquema. Entonces esta es solo una clase simple y aún no es un esquema de mangosta. Para convertirlo en un esquema de mangosta, utilizaremos este decorador de esquemas importado de T S Mongoose. Así que adelante e importar esquema de Nes Sí, biblioteca mangosta. Y vamos a colocarlo en lo más alto de nuestra clase de sangre. Así. asegura de que no haya líneas entre la clase y el integrador. Ahora para identificar las dos propiedades como propiedades de Mangosta, usaremos otro decorador e importaremos del mismo paquete. Nombra la sonda y colócala en la parte superior de cada propiedad. Por el título. Propón para el contenido. También podemos agregar alguna configuración a su propiedad agregando un objeto dentro del decorador de propiedades. Entonces, por ejemplo, si quieres que se requiera el título, podemos agregar un objeto y luego agregar la propiedad requerida y establecerla en true. De igual manera para la propiedad de contenido. Entonces voy a copiar ese objeto y pegarlo aquí. Después guarda para eliminar todos los errores de Eastland. Ahora para exportar la clase de sangre como esquema, vamos a importar la clase de fábrica de esquemas de esta sí, última biblioteca de mangostas aquí, ¿verdad? Esquema, fábrica. Y otra pero voy a exportar una constante y nombrarla log schema y establecerla igual a schema factory. Entonces crea un método de clase y vamos a pasar la clase de sangre. Esto configurará nuestro esquema de blog. Ahora, también necesitamos exportar el tipo de documento de blog para este archivo. Para ello, eso es importante. El documento hidratado directamente del paquete Mangosta. Y luego en la parte superior aquí, vamos a exportar un tipo y nombrarlo, tapar documento y configurarlo igual a documento hidratado. Y pasar el enchufe. Por último, para que el esquema sea accesible en toda nuestra aplicación, necesitamos ir al módulo app. Déjame primero decir esto e ir al módulo app. Y luego vamos a usar el módulo Mongoose dentro de la matriz imports, así, Mongoose deal. Y esta vez vamos a usar el método feature. Y dentro de ella vamos a pasar una matriz. Y esta matriz contendrá modelos Mongoose. Aunque es modelo de mangosta es un objeto con dos propiedades. El primer inmueble es nombre. Y podemos obtener el nombre del curso de clases de sangre. Hay que importarlo de blog, blog ese esquema nombre de punto. Y la segunda propiedad es la propiedad de esquema. Y vamos a obtener el esquema del esquema del blog y asegurarnos de importarlo también del blogueo en schema, el archivo ts. Ahora el método Mongo is model.fit se utiliza para importar modales Mongoose en un módulo de características específicas en STS. Este método toma en dos propiedades, nombre y esquema. La propiedad name especifica el nombre del modelo que se importar y generalmente se a importar y generalmente se establece en el nombre de la clase modelo. La propiedad schema especifica el esquema de mangosta que corresponde al modelo que se está importando. Mediante el uso del modelo de mangosta para el método de función. Hacemos que nuestros modelos Mongoose sean accesibles dentro de ese módulo. Ahora bien, la razón por la que tuve importar el esquema del blog aquí es porque el módulo app que tiene servicio de archivos como módulo raíz en tu nido sí. Proyecto. Es responsable de reunir todos los diferentes componentes, controladores y proveedores que componen su aplicación. Al importar estos módulos en el módulo de la aplicación, el archivo ts, los estamos poniendo a disposición de todo el mundo. Deseche su aplicación. Esto le permite reutilizar fácilmente componentes y proveedores, haciendo que su código sea más organizado y más fácil de mantener. Cuando estás creando un nuevo componente, es importante recordar importarlo al módulo app, el archivo ts, para que pueda ser utilizado por otras partes de tu aplicación. De igual manera, cuando crees un nuevo modelo de Mongoose, también necesitarás importarlo al módulo app, el archivo ts, para que pueda ser utilizado por tus controladores y proveedores. Esto le permite interactuar fácilmente con su base de datos MongoDB y realizar operaciones como crear, leer, actualizar y eliminar documentos. Bien, entonces esto concluye esta lección. Y el siguiente, profundizaremos en el servicio de blog que archivo ts. Aquí es donde ocurre la verdadera magia ya que usaremos el modelo de bloques que acabamos crear para realizar diversas operaciones de base de datos desde leer y crear blogposts, actualizarlos y eliminarlos lo cubriría todo en la siguiente lección. Así que asegúrate de tener tus notas mano y prepárate para codificar. Te veré en la siguiente lección. 5. Creación de un servicio de blog: En este video, estaremos explorando el poder de servicios en SES mediante el uso de la clase de servicio de blog, que ya se ha configurado con el decorador inyectable en el archivo block services.js. Entonces, antes de comenzar, me gustaría recordarles que toda esta configuración de este video ya está disponible en el proyecto al pasar a la sección de recursos. Así que asegúrate de descargarlo, ábrelo en tu editor de código preferido y ejecuta PMPM instalando el terminal para descargar todos los paquetes necesarios. Con eso fuera del camino, vamos a sumergirnos en el mundo de los servicios y SES. Por lo que esta clase se encargará de administrar todas las operaciones de nuestra base de datos. Eso dice recuperar, crear, actualizar y eliminar publicaciones de blog. Al utilizar el decorador inyectable, podemos definir esta clase como un servicio que se puede reutilizar fácilmente a lo largo de nuestra aplicación. Al final de este video, tendrás una sólida comprensión de cómo funcionan los servicios en SES y cómo usarlos para interactuar con la base de datos. Así que comencemos. Ahora, en las lecciones anteriores, hemos discutido la importancia del decorador inyectable en SDS. Este decorador se utiliza para indicar que la clase está destinada a ser como un servicio que puede ser inyectado en otros componentes. Es un aspecto crucial de escribir código limpio, modelador y mantenible en SDS. Mediante el uso del decorador inyectable, podemos manejar fácilmente dependencias y superficies de sillas entre diferentes partes de nuestra aplicación. Así que no olvides agregar el decorador inyectable antes definir tu clase de servicio en SDS. Dicho esto, está firmado para usar el poder de MongoDB dentro de nuestro servicio. Para ello, necesitamos importar el decorador de modelos inject de una biblioteca de mangosta de SES. Este decorador se utiliza para inyectar un modelo Mongoose en un servicio de inicio, facilitando la realización de operaciones de base de datos en el modelo. En nuestro caso, queremos definir una variable privada dentro del constructor de esta clase. Vamos a enchufar modal. Y va a ser de tipo modelo Mangosta. Para ello, necesitamos importar la interfaz Moodle desde Mongoose. Esta interfaz es una interfaz genérica que acepta un documento de mangosta. Aunque en nuestro caso, vamos a pasar el documento de sangre importado del blog, ese archivo de esquema. Ahora esta variable privada va a ser inyectada usando el decorador modal inject. Esto, el calificador aceptará el nombre del modelo de blog, puede obtenerlo del nombre de la clase de blog y asegurarse de desplegar el archivo de esquema de punto de blog de clase de blog. Ahora con esta variable inyectable, podremos realizar diversas operaciones de bases de datos en nuestro blog Moodle, y hacerla accesible en todo nuestro servicio. Ahora que tenemos nuestra conexión MongoDB establece un inicio creando algunos métodos para realizar operaciones de base de datos. Primero, creamos el método create. Asegúrese de que sea asíncrono. Este método va a ser responsable de crear nuevos bloqueos. Pero antes de comenzar a trabajar en el método en sí, es importante tener en cuenta los argumentos que el método lo tomará. En lugar de tomar directamente en los argumentos así, cadena de título, contenido, cadena. Es una práctica recomendada crear objetos de transferencia de datos o una interfaz DTO en otro archivo separado que contenga los datos que queremos guardar. Esto nos ayudará a mantener la estructura de los datos y evitar cualquier error que pudiera surgir al pasar los datos de Anchorage al método. O esto, encontrarás un crear un DTO, el archivo ts, guardar la carpeta de detalles. Este archivo vamos a exportar y crear una interfaz con el nombre crear blog, el verde azulado. Esta interfaz contendrá las propiedades que queremos guardar, el título de type string y el contenido de type string. Guarde este archivo y ciérrelo. Vuelve aquí, quita el título y los argumentos de contenido y reemplázalos por un argumento, crea blog, trato de tipo. Cree el registro D PARA asegurarse de importarlo desde la carpeta Tiers y desde el archivo DO del creador. Ahora dentro del método create, necesitamos crear una instancia de un modelo de blog. Así que adelante y crea una constante de blog. Usa la nueva palabra clave. Y luego la esta palabra clave para acceder al modelo de sangre. Y luego vamos a pasar el detalle de crear blog. Esto creará una instancia del modelo de bloques. Entonces tenemos que guardar eso y devolverlo al cliente. Devolver un peso. Blog punto guardar. A continuación, vamos a crear otro método con la actualización del nombre. Este método va a ser responsable actualizar una entrada de blog específica. Primero, necesitamos crear el blog de actualización DTO. Así que adelante y abre las actualizaciones son DTO, el archivo ts. Y aquí exportar actualizaciones de interfaz, enchufar el trato. Ahora para actualizar esta entrada de blog específica, el cliente necesita enviar el ID. Así que vamos a esperar a que el subrayado ID de tipo cadena. Como saben, Mongo almacena id con un subrayado. Así que asegúrate de agregar eso. Entonces por el título y el contenido, vamos a recibir eso dentro de un objeto de props cliente. Y el título aquí es de tipo cadena y el tipo de contenido cadena también. Pero queremos darle al cliente la libertad de actualizar solo título o solo. Pero hagamos que estas propiedades sean opcionales agregando el signo de interrogación antes de los dos puntos frente a cada propiedad. Guarde este archivo, ciérrelo. Aquí, guarda el método de actualización. Agreguemos el blog de actualización que argumento TO. Va a ser de tipo actualizar vlog video. Asegúrese de importar eso desde el archivo de video actualizado. Ahora guarda el método de actualización. Vamos a usar el método find one y update de la biblioteca de mangostas para actualizar la entrada del blog en la base de datos. Entonces vamos a devolver un peso, este modelo de blog de punto, punto encontrar uno, y actualizar. Ahora este método, primero aceptaremos un objeto como una consulta de filtro. Este objeto filtrará el documento del blog con el ID de subrayado. Y lo podemos conseguir desde el blog de Actualización puntos DTO. Y el riesgo de identificación. El segundo argumento va a ser el documento actualizado o la consulta de actualización. Por supuesto que puedes obtener eso de actualizaciones blog dto dot client prompts. El último argumento va a ser un objeto con una nueva propiedad establecida en true. La nueva propiedad va a decirle al método find one y update para que devuelva el documento de datos en lugar del documento antiguo. A continuación, vamos a crear un método asíncrono, y pueden obtener uno. Este método tomará el ID de la entrada del blog como argumento de tipo string. Y va a devolver la blog correspondiente de la base de datos. Así que dentro de aquí, bien, regresa, oh espera. Este bloque modal, encuentra uno. Este método aceptará un objeto. Y dentro de ella vamos a consultar nuestra entrada de blog con el ID de guión bajo. Debe ser igual al argumento ID. El siguiente método va a ser bueno. Ah, y va a ser responsable devolver las entradas del blog y la base de datos. Ahora bien, este método no aceptará ningún argumento. Y en cambio va a regresar inmediatamente 08. Este modelo de registro de puntos. El método Find by ID tiene que aceptar un objeto vacío para poder devolver todas las entradas del blog y la base de datos. Y finalmente, vamos a crear el método delete one. Este método tomará el ID de la entrada del blog como argumento de tipo string y eliminará la entrada de blog correspondiente de la base de datos usando el método find one y remove. Adelante y devuelve un peso, esta sangre modal que 0.1. Y eliminar y eliminar el documento del blog con el ID de guión bajo igual al ID del argumento. Ahora vamos a establecer el tipo de retorno de cada método. El método create es una promesa que resolverá un documento de bloque de título. Para el método de actualización. Lo mismo. Promesa. Eso resolverá el documento del blog aquí. Lo mismo también. Promesa. Enchufe para el get. Todos. Esto va a ser una promesa que resolverá una matriz de bloques. Para el borrado, vamos a enviar de vuelta no o un booleano. Puedes configurarlo como un tipo de resolución para este método o puedes dejarlo vacío. Entonces vamos a guardar este archivo y eso es todo para este video. Con estos métodos, ahora tenemos unos servidores funcionales que pueden realizar todas las operaciones de base de datos requeridas, pero voy a subir componente. En el siguiente video. Usaremos este servicio y el controlador del blog para definir los endpoints de nuestra API. Así que estén atentos. 6. Creación de un controlador de blog: Bienvenido de nuevo. Hasta ahora hemos creado con éxito nuestro componente sanguíneo, que incluye el esquema del blog y el Servicio de Sangre. Ahora es el momento de trabajar en el controlador del blog. Encontrarás el punto de partida para el proyecto en la sección de recursos de video. Para comenzar, simplemente descarga el proyecto y ábrelo en tu editor de VSCode. Y antes de comenzar a codificar, asegúrese de ejecutar PMPM instalado en el terminal para instalar todas las dependencias requeridas. En este video, estaremos creando el archivo blog dot controller.js, que actuará como puente entre el front-end y el back-end de nuestra aplicación utilizará este archivo para definir los diversos endpoints para nuestro componente de blog y también integrado con nuestro servicio de blog para realizar operaciones de base de datos. Entonces comencemos. Nuestro siguiente paso es sumergirnos en el mundo de las uvas. Específicamente, vamos a estar echando un vistazo al decorador controlador. Este decorador nos permitirá hacer accesible el controlador del blog desde el router de RBI. Sin embargo, si queremos cambiar el router de la raíz a, por ejemplo, blog. Así. Simplemente podemos pasar el blog string al control o a un decorador. De esta manera, podremos controlar la ruta donde se puede acceder a nuestro controlador de blog. Siguiente paso, necesitamos importar nuestro servicio de blog para poder utilizar todos los métodos de base que creamos en la última lección. Para ello, agregaremos sentencia import en la parte superior de este archivo e importaremos el Blood Service del blog que da servicio al archivo ts dentro del controlador de bloques. Vamos a crear el constructor y definir una variable llamada blogs. El servicio establecerá su tipo en la clase de servicio de enchufe. De esta manera, TypeScript puede entender las propiedades y métodos disponibles para nosotros desde el servicio de blog. Esto hace que nuestro código sea más fácil de escribir, mantener y libre de errores que ocurrirían en tiempo de ejecución. También ayuda con la finalización del código, lo que nos permite escribir código de forma rápida y precisa. Ahora vamos a crear el Create Router. Primero, agregaremos un nombre de método asíncrono y crearemos. Pero solo tener este método por sí solo crear un enrutador real funciona. Tenemos que decidir qué tipo de solicitud manejará este enrutador. En nuestro caso, queremos enviar la información del blog del cliente al servidor. Entonces implementaremos una solicitud de publicación. Podemos hacer esto fácilmente con la decoradora de postes que podría ser importada del nido que ha venido en paquete. Así que adelante y haz eso y colócalo en la parte superior del método create, así. Ahora, el decorador más puede aceptar un argumento de cadena opcional que representa la ruta del enrutador donde crean el enrutador aceptará solicitudes. Si lo dejamos en blanco, el cliente enviará la solicitud al host local 3,000 bloque. Sin embargo, si vamos a agregar varios enrutadores, es mejor hacer que el Create Router sea accesible a través de la ruta del enrutador create. Entonces hagámoslo. Ahora el método create recibirá un argumento body. El argumento body va a ser de tipo create log detail. asegura de importar la interfaz IO del creador TO por. Ahora, agregar el argumento body dentro de nuestro método create no es suficiente porque necesitamos hacer una conexión entre el cuerpo de la solicitud y este argumento. Ahí es donde entra el decorador de carrocería de Nes Sí, entra, lo importa primero de un equipaje que viene de SES. Y vamos a colocarlo dentro de la lista de argumentos de nuestro método create antes del argumento body, así. Y ahora por fin, podemos usar el servicio de blog para crear el documento de blog y devolverlo al lado del cliente aquí. Devolver una lista de espera, blog de puntos, servicio, Crear. Y luego vamos a pasar el argumento body al método create. Cuando guardemos el archivo o desaparecerán las áreas. Porque el argumento body tiene el mismo tipo que el argumento DTO create blog del método create. Y con eso, hemos completado la configuración del Create Router en nuestro controlador de blog. Enhorabuena. En el siguiente video, seguiremos trabajando con el controlador del blog e implementaremos el resto de los enrutadores como actualizar, eliminar y obtener. Estos nos permitirán realizar todas las operaciones necesarias en nuestros documentos de blog también repasaremos cómo manejar los errores que puedan ocurrir durante estas operaciones y asegurarnos nuestra aplicación sea robusta y confiable. Así que estén atentos para el siguiente video y sigamos construyendo juntos. 7. Creación de un controlador de blog: Gran trabajo al llegar hasta aquí. En la lección. En este siguiente segmento, vamos a echar un vistazo al resto de la clase de controlador de bloques. Empecemos por crear la actualización Troutman. Primero, crearemos un método asíncrono con el nombre de la fecha. Este método tomará en un argumento body. Así que adelante, usa el decorador de cuerpos y crea el argumento body y dale el tipo de actualización. Vlog video y asegúrese de importarlo desde el archivo de video. Ahora este método va a recibir una solicitud de post. Entonces usemos el integrador de post y dale la actualización de ruta. Aparte de este método, va a llamar al método de actualización en el servicio de blog. Así que adelante y regresa 08. Este servicio que actualiza y pasa en el argumento body. Ahora bien, este método de actualización va a actualizar el documento del blog en la base de datos. Pasemos al enrutador get one. Sigue adelante y vuelve a crear un método asíncrono, y es posible que obtengan uno. Este método nos permitirá recuperar una sola entrada de blog de la base de datos. Y tomará en un argumento ID de tipo string. Este id se pasará como parámetro a la ruta del router, que definirá usando el decorador get. Así que adelante e importe el paquete común get degraded from nest yes slash. Y luego dentro de aquí vamos a darle una ruta de post slash ID. Y luego dentro de la lista de argumentos de este método, vamos a usar otro decorador para extraer el ID de la ruta del router. Este es el mayor se denomina párr. Así que adelante e importar eso también del mesial es paquete común. Entonces dentro de él tenemos que nombrar a nuestro parlamento o en nuestro caso, nuestro parámetro tiene el nombre id Ahora, usaremos este método para llamar al método getline en el servicio de blog. Así que adelante y devuelve este servicio de bloque. Obtener uno y pasar en el argumento ID. Esto recuperará la entrada de blog deseada de la base de datos. A continuación, crearemos el Get o router. Este método nos permitirá recuperar todo perro oh, es de la base de datos. Primero crearemos, nuevamente un método asincrónico con el nombre gets. Todos. Este método no tomará ningún argumento ya que simplemente recuperará todas las publicaciones de la base de datos, definirá la ruta del enrutador usando el decorador get seguido de la ruta. Finalmente, usaremos este método para llamar al método get desde el servicio de bloque. Así que adelante y regresa 08. Este servicio de bloque, servicio que obtenga todo esto recuperará todas las entradas de blog de la base de datos. Ahora, por último pero no menos importante, crearemos el router intercalado. Este método nos permitirá eliminar una sola entrada de blog de la base de datos. Primero, crearemos un método asíncrono y lo nombraremos, delete. Este método tomará en un ID como argumento de tipo string. Este id se pasará como un parámetro en la ruta del enrutador, que definirá usando el eliminar el cráter en la parte superior. Importa y usa el decorador Delete, seguido de la ruta delete large colon ID para obtener el ID de la entrada de blog deseada. Y luego vamos a usar el paran, cuanto mayor sea para extraer el ID de la solicitud. Ahora, usaremos este método para llamar al método delete en el servicio de blog. Así que regresa, espera este servicio de bloque que elimine uno y pase en el argumento ID. Esto eliminará la entrada de blog deseada de la base de datos. Y con este método final, ya hemos completado la clase de controladores de sangre y todos sus enrutadores. Gran trabajo en seguir e implementar estas importantes piezas de nuestro proyecto. Por cierto, el argumento ID no es necesario para ser exactamente. Similar al nombre del parámetro? Sí, puede ser cualquier cosa como, por ejemplo, ID de subrayado. Sí. Y aquí hay que cambiar eso para subrayar ID. Pero el parámetro dentro de la ruta del enrutador debe ser igual al parámetro al nombre del parámetro dentro del decorador del programa. De lo contrario, no podrá obtener la identificación del paquete del enrutador. Bien, ahora que hemos terminado de crear todos los routers para nuestro controlador de blog, es importante pensar en el manejo de errores. Después de todo, las cosas pueden salir mal en cualquier aplicación. Y es crucial manejar estas situaciones y de manera apropiada y profesional. En SDS, tenemos varias formas de manejar errores, incluyendo el uso de filtros de excepción, vibraciones y guardias. En esta lección, usaremos filtros de excepción para manejar errores en nuestro control sanguíneo o métodos. Primero, vamos a probar la clase de excepción HTTP del paquete ***** yes, coming. Entonces, en la excepción HTTP de importación superior, esta clase nos permite lanzar una excepción relacionada con http y enviar un código de estado específico y un mensaje de error al cliente. A continuación, ejecutemos nuestro código dentro de un bloque try catch y a través de una excepción HTTP dentro de la trama guts, por ejemplo, dentro del método create. Podemos hacer algo así. Inténtalo. Entonces aquí, atrapa. Y vamos a conseguir el error. Entonces toma esta línea y ponla dentro del bloque try. Y en caso de que tengamos alguna otra que vamos a usar o vamos a lanzar una nueva excepción HTTP. Y la clase de excepción HTTP tomará un argumento de mensaje. Entonces estos musters pueden ser cualquier cosa. Entonces en nuestro caso, no sabemos qué salió mal dentro de los servidores de registro. Crear ese método de creación. Entonces vamos a mandar algo así como algo cuando baúl. Y entonces tenemos que pasar en otro argumento. Este argumento será el código de estado HTTP. Y podemos obtener eso de otra clase con un nombre http status. Se asegura de importarlo también. De una SDS vienen. Esta clase tiene muchos otros tipos. Y el que vamos a elegir aquí es el auto interno. Guarda esto para eliminar todos los errores de sí , y como puedes ver, manejo de errores en SES es mucho más simple que una aplicación NodeJS pura. Podemos implementar este mismo patrón en el resto de los métodos. Detectar los errores y enviar un mensaje de error y código de estado adecuados al cliente. Al implementar el manejo de errores de esta manera, nos aseguramos de que nuestra aplicación se comportará correctamente incluso en el caso de otras brinden una mejor experiencia de usuario y mantengan nuestro código organizado y profesional. Y ahora eso es todo para este video. Ya hemos completado la clase de controlador de blog y todos sus enrutadores encontrarán el resultado final de esta lección en video adjunta a la sección de recursos. Así que adelante y descárgalo en caso de que algo saliera mal en tu código. En el siguiente video, vamos a probar nuestra aplicación utilizando el software cartero. Entonces nos vemos ahí. 8. Poner a prueba el componente de blog: En esta lección, analizaremos nuestros componentes sanguíneos usando el software Boltzmann. Antes de comenzar a probar, asegurémonos de que estoy poniendo tanto el controlador azul como el servicio de blog dentro de la aplicación modeló el archivo ts para hacer eso. Primero abra App Model y luego dentro de la matriz de controladores. Vamos a agregar el controlador de sangre. Por supuesto que hay que importar eso del blog dot archivo controller.js. Para el servicio. Vamos a poner eso dentro de la matriz de proveedores. Así que adelante y escribe servicio de blog e impórtalo también de su archivo correspondiente. Ahora bien, esto es importante para garantizar que el componente esté completamente integrado en nuestra aplicación y se pueda acceder por correo postal. Ahora, antes de ejecutar nuestra aplicación, tenemos que asegurarnos de importar el archivo antes que todo lo demás. Así que adelante y pon esta línea como primer ítem de la matriz. Porque si no haces esto, obtendrás un error de base de datos. Bien, vamos a guardar este archivo y cerrarlo. Entonces abre el lado de la terminal aquí y ejecuta el comando npm run, empieza a llamar a diff. Bien, Como puedes ver cómo se está ejecutando una aplicación SES y esperando conexiones en el puerto 3,000. Ahora abramos nuestros carteros y asegurémonos de crear un nuevo espacio de trabajo. Y luego aquí dentro de la sección de colección, haga clic en el botón Nuevo y luego elija solicitud HTTP. Ahora vamos a comenzar a probar el Create Router. Haz esto. Elijamos la solicitud de publicación de esta lista. Aquí, vamos a pasar en la URL http localhost, luego la ruta del router del método create. Entonces el método grid existe dentro del blog Create. Ahora en la sección body de la solicitud, vamos a enviar una carga útil JSON que represente la entrada de blog que queremos crear. Haces eso, da clic en la fila. Y luego aquí, cambiar dx2, json. Y luego vamos a crear un objeto aquí y pasar el título. Entonces el título va a ser blogueado o blog de prueba. Y el contenido va a ser contenido de prueba. Ahora, para enviar esta solicitud da clic en el botón Enviar. Ahora, como puede ver, recibimos una respuesta con un estado 200 y el objeto adyacente que representa la entrada de blog recién creada con el id, el título y el contenido, y el guion bajo. El subrayado V representa la versión de este documento. Ahora vamos a usar el ID de este documento de bloque en los siguientes enrutadores. Entonces, sigamos adelante y copiemos esta identificación. Y vamos a guardarlo como una variable de entorno dentro de Postman. Así que da clic en la sección de entornos. Y luego dentro de aquí, vamos a nombrar a este blog subrayado ID. Y va a establecer el valor al ID del documento del blog. Vamos a hacer clic en el botón Guardar para guardar esta variable de entorno. Entonces volvamos aquí. Y vamos a conseguir un router. Este enrutador recupera una sola entrada de blog basada en su ID a este enrutador enviará una solicitud get. Entonces cambiemos esto para conseguir. Y luego vamos a enviar una solicitud a la ruta Blog, luego publicar. Y luego vamos a enviar el ID que acabamos de guardar como un entorno global está dentro de Postman para acceder a esa variable de entorno a llaves como esta. Después 2s bloquean subrayado ID. No necesitamos enviar ningún cuerpo. Así que adelante y elige ninguno aquí y luego envía la solicitud. Y aquí vamos, tenemos nuestro documento de blog invitado. Ahora, sigamos adelante y probemos el enrutador get all. Este router o recupera todas las entradas de blog almacenadas en nuestra base de datos. Actualmente tenemos una entrada en el blog. Así que vamos a obtener una matriz de un documento de blog que tiene este enrutador. Asegúrate de tener el tipo de solicitud de gato aquí. Y luego cambiar esta URL también. Blog, luego 0, envía la solicitud y deberías obtener una matriz de un documento de blog. Pero como pueden ver aquí, tengo múltiples documentos de blog porque lo he probado antes de comenzar a grabar. Así que tengo múltiples publicaciones de blog aquí. Pero como puede ver, también tenemos nuestro último documento de bloque, representado dentro de esta matriz. Entonces, en tu caso, ahí solo obtendrás este documento de bloque. Ahora, finalmente, vamos a probar el router de eliminación. Este enrutador o elimina una sola entrada de blog en función de su ID. Entonces, cuando enviamos la solicitud, obtendría una matriz de todos estos argumentos registrados. Y este documento de blog no va a estar ahí. Se borrará. Para ti. Obtendrá una matriz vacía. Sigamos adelante y probemos ese blog y luego eliminemos. En. Agreguemos nuestro ID de blog, dos llaves y luego seleccionemos ID de subrayado de bloque. Asegúrese de cambiar el tipo de solicitud para eliminar. Vamos a mandar esto. Y aquí vamos. En realidad obtuvimos el documento de blog eliminado. Sí, no recibimos sitio o aplicación. No devolvimos una serie de documentos. Entonces aquí, el eliminar uno. Este método solo devolverá el documento del blog y devolverá un nulo si no encontró el documento solicitado. Sí, volvamos aquí y probemos de nuevo el enrutador get all y verifiquemos si este documento de bloque fue realmente eliminado o no. Vamos a mover esto. Y en cambio, llamemos a blog slash bowl y cambiemos su asqueroso para conseguir que los ascendentes. Y como puede ver, el registro de pruebas no es tan n dentro de esta matriz. Así que realmente se eliminó. Y por eso, hemos probado todos los enrutadores y el controlador de blog usando el software cartero enviando solicitudes HTTP e inspeccionando las respuestas desde el servidor, podemos estar seguros de que nuestro componente está funcionando como se esperaba. Así que por favor asegúrese de importar el controlador y los servidores de bloque aquí. Y para poner este salto de columna vertebral o el archivo M como primer elemento de la matriz. En el siguiente video, vamos a empezar a trabajar en el componente de usuario. Entonces cilios. 9. Diseñar e implementar el esquema de usuarios: En esta siguiente lección, nos centraremos en crear el esquema de usuario. El esquema de usuario se utilizará para almacenar la información de los usuarios registrados en nuestra aplicación. Para comenzar con on solo debes agregar la propiedad email como una propiedad de esquema. Esto simplificará el proceso de firma de objetivo para nuestros usuarios. Ahora, quiero desafiarte a que intentes construir el esquema de usuario por tu cuenta antes de ver este video. Esto te ayudará a entender el proceso de creación de tu esquema y la lógica detrás de él. Y luego después de que lo hayas probado, cuál es el video para ver este proceso paso a paso y crear el esquema de usuario y asegúrate de seguirlo para evitar errores. Ahora comencemos dentro del esquema de puntos del usuario, el archivo ts. Siga adelante y exporte una nueva clase y asígnele el nombre del lado del usuario. Esta clase tendrá una propiedad innata de tipo string. Ahora vamos a importar estos evaluadores esquemáticos y verterlo esquema de este paquete yes Mongoose. Y luego colóquelo en la parte superior de la clase de usuario. Así. Entonces para el correo electrónico amplio necesita el prop, el evaluador. Así que adelante e importa eso y colóquelo en la parte superior de la propiedad de correo electrónico. Esta propiedad va a ser requerida. Así que adelante y agrega la propiedad requerida dentro del decorador de prop. Y luego vamos a exportar nuestro esquema de usuario. Hagámoslo en el botón. Crear un esquema de usuario con nombre constante y establecerlo igual al esquema. Bacterias, se asegura de importar eso de esto sí, hongo. Luego usa el método create for class y pass en la clase de usuario. Ahora el último paso es explorar un tipo de documento de usuario a partir de este archivo. Para ello, eso es tipo de exportación y nombrarlo documento de usuario. Y luego usar el documento hidratado y sacarlo del paquete Mangoose. Vamos a utilizar este tipo para crear un documento mangosta de tipo usuario. Ahora vamos a guardar este archivo e ir al módulo app, el archivo ts aquí, y añadir nuestro modelo Mongoose recién creado dentro del módulo mangosta punto para método característica dentro de esta matriz. Aquí, crea otro objeto, m más n, El nombre. Esta vez el nombre va a ser extraído de la clase de usuario. Así que asegúrate de desplegar eso desde el esquema de usuario y luego pasar el nombre. Y necesitamos que el esquema se va a establecer en esquema de usuario. asegura de importarlo también desde el esquema de punto del usuario, el archivo ts. Déjame guardar este archivo ahora. Y como puedes ver, no hay nada complicado en construir un esquema de mangosta usando SDS. Esto lo hemos hecho en las lecciones anteriores y lo hemos vuelto a hacer aquí. Espero que hayas tenido éxito en la construcción del esquema de usuario por tu, oh, ahora eso es todo para este video. Quiero que sea breve. Y en el siguiente video vamos a empezar a trabajar en el servicio al usuario. El servicio de usuario solo contendrá un método o create, pero vamos a tratar con la autenticación usando tokens JWT o JSON Web Tokens. Así que estén atentos y nos vemos en la siguiente lección. 10. Creación de un servicio de usuario: En esta siguiente lección, nos sumergiremos en construir el servicio de usuario se centrará en crear solo el método de creación a partir de ahora. Pero debes sentirte confiado en tus habilidades para seguir construyendo los otros métodos después de esta lección. Ahora para desafiarte a ti mismo, puedes intentar construir el método de creación por tu cuenta antes de ver el video. Al hacer esto, puedes reforzar lo que has aprendido y aplicarlo a un nuevo escenario. Y puedes ir más allá de eso e intentar, al crear el método create, intentaste devolver un token JWT al usuario. Esta será una gran oportunidad para fortalecer su comprensión de la creación de servicios y SCS. Así que prepárate para arremangarte y sumérgete en crear el servicio al usuario. Vamos a empezar por crear nuestro constructor dentro del servicio al usuario. En su interior, vamos a inyectar el modelo de usuario. Entonces para hacer eso, primero, vamos a crear una variable privada y nombrarla modelo de usuario y darle el tipo de modelo importado del paquete Mongoose y pasemos en el documento de usuario como pestaña de documento de Mangoose para eso también del esquema de punto de usuario, el archivo ts. Ahora bien, definir el modelo de usuario así no significa que lo hayamos inyectado dentro de nuestro servicio de usuario. Entonces para hacer eso, usaremos el decorador y verificaremos Moodle. Importar eso de los nazis rozan Mangosta. Este decorador aceptará el nombre del modelo. Podemos obtenerlo desde el nombre de la clase de usuario. Asegúrese de importar la clase de usuario desde el esquema de apariencia de usuario, el archivo ts. Ahora por esto, hemos inyectado con éxito el modelo de usuario dentro de nuestro servicio de usuario. Ahora podemos usarlo dentro del método create. Entonces va a ser un método asincrónico con el nombre create. Y este método aceptará un correo electrónico de tipo string como argumento. Y dentro de eso vamos a crear una nueva instancia del documento de usuario. Para ello, usaremos la palabra clave new y luego usaremos la clase UserModel en la que la hemos inyectado dentro que usará su servicio para crear una nueva instancia de documento de usuario pasando un objeto con la propiedad email. Ahora, vamos a guardar nuestro documento de usuario usando el método save. Pero esta vez vamos a mantener el documento seguro dentro de un usuario guardado con nombre constante. Entonces, oh, espera, por estos métodos seguros. Ahora bien, la razón por la que creé esta constante de usuario guardada aquí es porque vamos a usar los datos del documento de usuario para generar un JSON Web Token y guardar los datos del usuario dentro de él, y luego enviarlos de vuelta al cliente. Entonces, en la siguiente línea, devolveremos un objeto con la propiedad Jason o token JWT. Esta propiedad contendrá la cadena de token web JSON. Ahora, para hacer eso, para generar el token web JSON habrá que entender qué es un JSON Web Token. En pocas palabras, un token web JSON es una forma transmitir información de forma segura entre las partes como objeto adyacente. En este caso, la información sería un token de autenticación que identifica al usuario. Después de que un usuario inicie sesión en nuestra aplicación, devolveremos un objeto que contiene el token JWT. Ahora este token se utilizará para autorizar al usuario a acceder a rutas protegidas. Pero por ahora, centrémonos en generar el token JWT real. Y para eso, necesitamos instalar algunas dependencias nuevas. Así que abre tu terminal. Aquí. Ejecutemos el comando PMPM. Eso sí ahorra. Entonces agregue ness G, S más T W T. Este paquete es un paquete utilitario que nos ayuda con la manipulación de GW t. El segundo paquete van a ser los paquetes de pasaporte JWT. Ahora bien, este cubo es el paquete de pasaporte que implementa la estrategia JWT. Vamos a usarlo cuando empecemos a proteger nuestras rutas, usando guardias de autenticación para evitar que usuarios no autorizados usen nuestro PR. Ahora, ejecuta este comando y deberías tener estas dos dependencias instaladas dentro de tu aplicación. Y después de eso, hay que instalar los tipos de TypeScript del paquete pasaporte hace JWT, y se asegura de instalarlos como una dependencia dev, usando el escritorio se ha guardado como etiqueta div, y luego agregar tipos, pasaporte, eso es T W T. Y pulsa enter y completa el proceso de instalación. Una vez que tengas instaladas estas dependencias dentro de tu aplicación, sigue adelante y abre el módulo app, el archivo ts a un lado aquí, y vamos a importar nuestro módulo JWT para que pueda ser usado en toda nuestra aplicación. Para hacer eso, primero importaremos el módulo JWT de los paquetes en Nest GS slash JWT. Y luego dentro de la encuesta de importación, vamos a usar el módulo JWT. Después resistor. Aquí, vamos a pasar en un objeto con algunas configuraciones. Ahora, la primera propiedad dentro este objeto de configuración va a ser el secreto. Aquí guardaremos nuestro token secreto JWT. Ahora el token secreto se usa para descifrar el token JWT y extraer los datos del usuario de él. Entonces, el token secreto JWT juega un papel crucial en el proceso de autenticación. Entonces tenemos que guardar ese token dentro del archivo m. Así que adelante y abre eso. Y encontrarás un secreto de subrayado JWT valioso. Puedes poner aquí cualquier carácter aleatorio. Y luego guardar este archivo. Regresa aquí. Y vamos a usar esa variable de entorno del proceso que objeto, luego punto DWT bajo subrayado secreta. El segundo inmueble van a ser las subastas de letreros. Esta propiedad será un objeto con algunas otras propiedades de configuraciones. Una de estas propiedades es la caduca en propiedad. Esto definirá el periodo de tiempo en el que será válido el token web JSON. O en otras palabras, definir el periodo de tiempo en el que el usuario será autenticado en nuestra aplicación y cuándo deberá volver a iniciar sesión para obtener un nuevo JSON Web Token. Entonces vamos a fijar esto a dos días. Después guarda el módulo de app y ciérralo, y ciérrelo. Aparte aquí vamos a generar el token web JSON usando la superficie JWT que viene de la biblioteca DWT de SES slash. Primero, es importante en la parte superior de nuestro archivo. Y dentro del constructor del servicio de usuario, vamos a crear una nueva variable, nombre y servicio GW t y establecer su tipo en servicio JWT. Ahora regrese a nuestro JWT y propiedad y usemos ese servicio para firmar un nuevo token web JSON con los datos de seguridad del usuario. Entonces el mismo método va a aceptar una carga útil que pueda contener cualquier propiedad que desee guardar sobre el usuario dentro del token web JSON. Entonces en nuestro caso, queremos guardar el ID de usuario. Podemos obtener eso a partir de la constante de usuario guardada , ese ID de subrayado. Y debido a que el id del guion bajo es de tipo Mongoose ID, tenemos que cambiarlo a una cadena usando el método toString. Ahora la siguiente propiedad que quería guardar es el correo electrónico. Puede obtenerlo también de los usuarios guardados o del usuario de seguridad constante punto n. Con esta pieza final, hemos terminado con éxito nuestro servicio al usuario. En el siguiente video, vamos a construir nuestro controlador de usuario y crear el Create Router. Entonces nos vemos ahí. 11. Creación de un controlador de usuario: Bienvenido a este video donde nos enfocaremos en construir el controlador de usuario en nuestra aplicación SES. En las lecciones anteriores, hemos creado el esquema de usuario y el servicio de usuario, que ahora servirán base para el controlador de usuario. El controlador de usuario se encargaría de manejar las solicitudes HTTP entrantes y dirigirlas al método de servicio adecuado para su procesamiento. Ahora, solo empieza, agregaremos el usuario string dentro del control o decorador. Esto nos permitirá crear un punto final específico para el controlador de usuario. Al usar el decorador de controladores, estamos definiendo la ruta base para nuestro controlador de usuario, lo que nos permitirá administrar y organizar fácilmente nuestros endpoints API. Ahora, agreguemos la variable de servicio de usuario dentro del constructor. Así que sigue adelante y crea una variable privada y asímbrala Servicio de Usuario, y establece su tipo en clase de servicio de usuario. Entonces vamos a crear un método asíncrono, nómbralo crear. Este método aceptará una solicitud de correo. Así que adelante e importa y usa el decorador de post en la parte superior de nuestro método create y dentro de él, dale el path create. Ahora bien este método o este router va a aceptar un cuerpo. Y podemos extraer el cuerpo usando el cuerpo cuanto mayor. Así que adelante e impórtelo también del nido sí, paquete común. Y definamos nuestro argumento corporal. Entonces nuestro argumento body va a ser un objeto que contiene una propiedad email de tipo string. Ahora aquí vamos a devolver 08, este servicio de usuario. Y vamos a usar el método create dentro del servicio de usuario para crear un nuevo documento de usuario, guardarlo en la base de datos, y luego regresar. El token JWT irá a Bus en el correo electrónico que está dentro del cuerpo. Y con esto, hemos creado con éxito el controlador de usuario y el Create Router. Por lo que el usuario podrá crear una nueva cuenta usando el punto final create. Y luego vamos a enviar de vuelta un token JWT para autorizarlo. Con solo enviar el token JWT no significa que nuestra aplicación esté completamente protegida contra el uso malicioso. Es importante recordar que es necesario dar más pasos para asegurar nuestra aplicación. Dicho esto, en el próximo video, estaremos explorando cómo podemos proteger nuestro controlador de blog de usuarios no autorizados usando un JWT of God, que actúa como un middleware de autenticación. Con esta implementación, podemos garantizar que solo los usuarios autorizados puedan acceder a nuestros endpoints y proteger nuestra aplicación de uso malicioso. Así que mantengamos este video corto y nos vemos en el siguiente. 12. Implementación de autenticación con Auth Guards: En esta lección, vamos a aprender a implementar la estrategia JWT y honesto sí, obligación y proteger a nuestro controlador de usuario no autorizado está utilizando un JWT off guard. Pero antes de sumergirnos en la implementación, hagamos una introducción rápida en tarjetas en SES con respecto a ITS y contextos de ejecución que se agregue como middleware y verifique si una solicitud está autorizada para acceder a un punto final en particular. Entonces usando este jardín, podremos verificar el, si el token JWT es válido o no y extraer la carga útil del usuario de él. Ahora que tenemos un conocimiento básico de las tarjetas JWT, necesitamos comenzar instalando una nueva dependencia. Así que adelante y abre tu terminal y ejecuta el comando PMPM, salva vidas, pasaporte. Este es un paquete muy importante ya que se encargará de extraer el token JWT del encabezado y decodificar. Y luego si solo tiene fecha y nos proporciona los datos que se guardaron en su interior. Una vez que haya terminado de instalar el paquete de pasaporte, continúe y cierre la terminal y luego asegúrese de descargar el punto de inicio de este proyecto que se adjunta a la sección de recursos de este video en su sistema. Y luego dentro de la carpeta Tierra encontrarás dos archivos. En este momento, vamos a trabajar en la estrategia GWP, el archivo ts. Aquí vamos a exportar una clase con un nombre de estrategia JWT. Y esta clase va a ser inyectable. Y cómo podemos hacerlo inyectable, claro, con el decorador inyectable. Así que adelante y agrega la W, esta clase o el decorador inyectable e importado de un comentario de SES slash. Entonces esta clase extenderá la estrategia de pasaporte de clase. Como dije, temprano, paquete de contraseñas tempranas se encargará de extraer el token JWT del encabezado y decodificarlo, para extraer el token JWT del encabezado y decodificarlo, luego proporcionarnos los datos que fueron decodificados del token JWT. Ahora bien, esta clase, va a aceptar otra clase de utilidad con la estrategia de nombre. Podemos importar eso desde passport dash d, t. ahora sigamos adelante y creamos el constructor de esta clase. Y dentro de las llaves rizadas, vamos a usar el súper método. Ahora, el súper método se utiliza para llamar al constructor de la clase padre. Súper matutino dentro del constructor de la subclase, que es la estrategia JWT, estamos permitiendo que herede las propiedades y métodos de la clase padre, que es la estrategia de pasaporte. Esto ayuda a crear un código más organizado y mantenible. Cada vez que extiendes otra clase, tienes que usar el método super para asegurarte de que tu subclase está heredando todas las propiedades y métodos de la clase padre. Entonces este método aceptará y objetará, y este objeto entrará en agregar algunas propiedades. La primera propiedad es la solicitud de JWT. Esta propiedad le dirá a la clase de contraseña cómo puede extraer el token JWT de la solicitud. Queremos extraer el token del encabezado como una barrera o un token. Para ello, vamos a usar otra clase con el nombre extract JWT importado de la contraseña dash g, DWT. Entonces esta clase nos proporciona un método con el nombre de header como token de barrera. Con este método, nuestra clase Esports, que va a extraer el token del encabezado como un token de barrera. Ahora el segundo argumento va a ser ignorar la exploración y ponerla en falso. Estamos convirtiendo la mejor clase de tablero para no ignorar el token caducado. Entonces, si el usuario envió un token caducado a la API rechazará su solicitud y devolverá una botella una respuesta. Por lo que no autorizado solicitan respuesta. Ahora la última propiedad va a ser propiedad secreta o clave. Esta propiedad mantendrá secreto el token JWT para que los titulares de pasaportes puedan decodificar el token JWT. Lo guardamos dentro del archivo como una variable de entrada. Por lo general, procesa ese objetivo para importar el secreto JWT. Y luego terminamos de configurar nuestras configuraciones de pasaporte. Ahora podemos seguir adelante y crear un método dentro de la clase de estrategia GW. Este método va a ser N N método sincrónico con el nombre cuerpo fecha. Este método aceptará una carga útil y todo lo que tenemos que hacer es haber visto la carga útil al siguiente enrutador simplemente devolviendo la carga útil de este método. Ahora podemos poner el tipo de carga útil va. Ya conocemos la forma de esta carga útil porque hemos guardado la carga útil dentro del token JWT con dos propiedades, el ID de usuario y el correo electrónico. Y ambos son de tipo string. Así que agreguemos dos puntos y un objeto con propiedad user id de tipo string y email de tipo string. Ahora la clase passport, construimos un objeto de usuario basado en el valor de retorno del método validate y lo adjuntamos como una propiedad en el objeto request. Entonces, para pasar de esto, sigamos adelante y abramos el JWT Asgard, el archivo ts. Y aquí vamos a construir nuestro DWT. Entonces este Guardias va a ser un GWP de clase de Dios. Y esta clase va a ser una clase inyectable. Ellos seguirán adelante y usarán el decorador inyectable. Y vamos a extender otra clase con el nombre de Dios. Puedes importarlo desde paquetes de pasaporte SES plus. Esta clase de guardia, va a aceptar el tipo de estrategia de autenticación. En nuestro caso, estamos usando la estrategia JWT. Así que adelante y escribe DWT dentro la Tierra y luego guarda este archivo, ciérralo. Aquellos la estrategia GW, el archivo ts, vuelven a nuestro componente de bloque. Y vamos a implementar el método start to the create. Así que vamos a evitar que usuarios no autorizados creen entradas de blog dentro de nuestras relaciones públicas. Entonces para hacer eso, usemos el calibreador que descartes, que se importará del nido zs paquetes menos comunes. Y entonces aquí vamos a usar el desprevenido JWT que hemos creado dentro de los oficiales DWT que vi esa tarjeta, el archivo ts. Entonces vamos a guardar esto y luego vamos al módulo de app. Y aquí tenemos que importar nuestra clase de estrategia JWT dentro la matriz de proveedores para que pueda ser accesible en toda nuestra aplicación. Así que sigue adelante y agrega otro ítem y escribe la estrategia JWT. asegura de importar eso de diapositivas JWT estrategia de puntos y por qué estamos aquí, vamos a importar el controlador de usuario también. La matriz de controladores y el servicio de usuario. Y decir que el proveedor es Eddie. Bien, volvamos al controlador del blog. Y al implementar el off-guard, así, estamos protegiendo el Create Router de usuarios no autorizados. Ahora podemos agregar una capa extra a nuestra autenticación agregando una propiedad de usuario dentro del esquema de bloques para que podamos saber qué usuario ha creado el documento de blog. Entonces podemos decir el esquema de usuario, agreguemos otra sonda y hagamos que se requiera. Y nombra este usuario de propiedad. Ahora esta propiedad va a ser de tipo user class. Asegúrese de importar eso desde el archivo de esquema de usuario. Y también esta propiedad va a ser una referencia al documento del usuario. Ahora para hacer eso, este objeto, vamos a agregar la propiedad type y establecerla en Mangoose. Asegúrese de importar el paquete Mongoose de mangosta y luego seleccione tipos de esquema ID de objeto. Porque queremos referirnos al usuario por su ID y luego agregar la propiedad href para establecer la referencia de este producto al modelo de usuario. Después guarda el esquema del blog, ciérrelo y vuelve al controlador de flujo. Y dentro del método create, vamos a extraer el objeto user de la solicitud. Se puede hacer eso dentro de la lista de argumentos del método create. Y al usar el decorador reg, asegúrese de importarlo desde el paquete común de SES. Ahora este decorador nos va a dar acceso a la solicitud y vamos a tomar el objeto de usuario de ahí. Entonces, dentro del método create del servicio de blog, agreguemos un, especialmente en un objeto y el objeto aquí. Y agregar una propiedad de usuario proveniente del usuario de solicitud. Y luego agrega un signo de interrogación ahí porque el objeto de usuario puede estar indefinido. A continuación, seleccione el ID de usuario. Ahora tenemos que ir a los servidores de bloque. Y dentro del método create aquí están dentro la interfaz Creative Blog DTO. Tenemos que agregar una propiedad de ID de usuario de tipo string. Guarda los creados PARA volver aquí. Y cuando salvamos, todas las flechas deberían desaparecer. Justo aquí. Tenemos que cambiar esto a ID de usuario. Ahora dentro de los otros enrutadores, como la actualización, podemos realizar una operación para verificar si el usuario dentro del documento de bloque solicitado tiene el mismo ID de usuario que el ID de usuario extraído del token JWT. Podemos hacer lo mismo dentro del router delete one aquí. Voy a dejar eso como un reto para que practiques tu nido sí. Balanzas. No debería ser tan difícil. Solo necesitas leer el documento del blog de la base de datos, el prop del usuario, y verificar si es igual al ID de usuario extraído del token. Si es así, devuelva el documento del blog o permita la acción de actualización en el documento de bloque solicitado. Entonces con esto, hemos terminado de crear nuestro controlador de blog e implementar la aplicación de autenticación de adentro hacia afuera. Encontrarás el resultado final adjunto a esta sección de recursos de video.