El curso de Express. js: módulo 5: Express avanzado | Shivendra Raghuvanshi | Skillshare
Buscar

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 5: Express avanzado

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

      2:34

    • 2.

      Sumérgete en técnicas avanzadas de Express

      0:33

    • 3.

      Magia del middleware en Express.js

      2:57

    • 4.

      Crea tu propio middleware de Express

      4:16

    • 5.

      Uso del middleware integrado en Express

      3:58

    • 6.

      Mejora Express con middleware de terceros

      4:17

    • 7.

      Configurar Express para diferentes entornos

      4:17

    • 8.

      Técnicas avanzadas de configuración

      9:18

    • 9.

      Solución de problemas y depuración de aplicaciones Express

      6:02

    • 10.

      Vistas dinámicas con motores de plantillas

      5:04

    • 11.

      Integración de bases de datos con Express.js

      1:58

    • 12.

      Protege las aplicaciones de Express con autenticación

      0:36

    • 13.

      Mejores prácticas para estructurar aplicaciones de Express

      7:35

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

4

Estudiantes

--

Proyecto

Acerca de esta clase

¡Bienvenido al módulo 5: Express avanzado! En este módulo, exploraremos las poderosas características de Express.js que van más allá de lo básico y te permitirán crear aplicaciones dinámicas, flexibles y listas para la producción.

Comenzarás por dominar el middleware, una piedra angular de Express.js que te permite manejar todo, desde el registro hasta el manejo de errores. Aprende a crear middleware personalizado, usa opciones integradas y mejora tu aplicación con middleware de terceros.

Luego, nos sumergiremos en configuraciones avanzadas, técnicas de depuración e integración de Express con bases de datos para servicios de backend robustos. También trabajarás con motores de plantillas para crear vistas dinámicas y aprenderás las mejores prácticas para estructurar tus aplicaciones de Express como un profesional.

Al final de este módulo, tendrás un profundo conocimiento de Express.js y estarás listo para abordar proyectos complejos con confianza.

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 Módulo cinco del curso ExpressJS Advanced Esta clase es una continuación de la serie de cursos ExpressJS Mi nombre es Shawn Ragunhi y estoy emocionado de guiarte a través este siguiente paso para dominar Express JS haber trabajado en numerosas aplicaciones de grado de producción, conozco la importancia de comprender las capacidades avanzadas de Express, y estoy aquí para compartir esa experiencia con usted. En este módulo, profundizaremos en las características avanzadas de Express JS. Esto es lo que aprenderá la magia del Middleware, cómo usar opciones integradas, integrar bibliotecas de terceros e incluso crear su propio Middleware personalizado Después verá técnicas de configuración avanzadas para hacer que sus aplicaciones adaptables a diferentes entornos. Entonces aprenderás a solucionar problemas y depurar aplicaciones express como un Pro Después de eso, aprenderá a integrar bases de datos con Express para una administración de datos fluida. Y finalmente, las mejores prácticas para estructurar y organizar sus aplicaciones para la escalabilidad y mantenibilidad Este módulo es perfecto para desarrolladores que ya se sienten cómodos con los conceptos básicos de Express y están listos para llevar sus habilidades al siguiente nivel. Si has completado el módulo anterior o tienes alguna experiencia con APIs de descanso, ya estás listo para sumergirte Al final de este módulo, tendrá un conocimiento profundo funciones avanzadas de Express JS, lo que le permitirá construir aplicaciones de radio sofisticadas y de producción. Ya sea que estés construyendo un proyecto personal o trabajando en aplicaciones de nivel empresarial, estas habilidades te diferenciarán como desarrollador backend Por último, nuestro proyecto en este modio se centrará en mejorar el empaque de ruedas justo Mejorará la estructura y mantenibilidad de la aplicación de llantas justas refactorizando Organizar su código es un paso crítico en creación de aplicaciones escalables y listas para la producción. Y este proyecto te guiará a través del proceso de modularización de tus rutas Estoy encantado de ayudarte a desbloquear todo el potencial de Express Js. Vamos a sumergirnos y comencemos. Nos vemos en la primera conferencia. 2. Sumérgete en técnicas avanzadas de Express: En la última sección, aprendiste a construir servicios RSL usando Express En esta sección, vamos a continuar nuestro viaje con Express y mirar temas más avanzados. Más específicamente, veremos motores de middleware, configuración, depuración y plantillas Así que ahora comencemos. 3. Magia del middleware en Express.js: Uno de los conceptos centrales en express que necesitas aprender es el concepto de middleware o función de middleware Una función de middleware es básicamente una función que toma un objeto request y devuelve una respuesta al cliente o pasa el control a otra función de middleware Ya has visto dos ejemplos de funciones de middleware Una es esta función de manejador de rutas. Entonces en Express, cada función de manejador de ruta que tenemos es técnicamente una función de middleware porque toma un objeto request, y en este caso, devuelve una respuesta al cliente, por lo que termina el por lo que termina Entonces este es un ejemplo de una función de middleware. Tenemos otro ejemplo que está en la línea cinco. Entonces, cuando llamamos a Express a través del método JCN, este método devuelve una función, una función de middleware El trabajo de esta función de middleware es leer la solicitud, y si hay un objeto JCN en el cuerpo de la solicitud, pasará el cuerpo de la solicitud a un objeto JCN, y luego dirá request at Esencialmente, esto es lo que sucede en tiempo de ejecución. Cuando recibimos solicitudes en el servidor, esa solicitud pasa por este pipeline. Llamamos a este pipeline, el pipeline de procesamiento de solicitudes. En este pipeline, tenemos una o más funciones de middleware Cada función de middleware termina el ciclo de respuesta de solicitud devolviendo un objeto de respuesta, o pasará el control a otra Entonces, en nuestra implementación actual, el pipeline de procesamiento de solicitudes tiene dos funciones de middleware La primera es la función middleware que pasa el cuerpo solicitado a un objeto JCN Ahora, en este caso, no termina el ciclo de respuesta a la solicitud. Entonces pasa el control a la segunda función de middleware, que es, en este caso, nuestro manejador de rutas En nuestro manejador de rutas, tenemos el objeto request con una propiedad body poblada Entonces aquí podemos realizar alguna operación y luego terminar el ciclo de respuesta a la solicitud devolviendo una respuesta al cliente. Entonces Express incluye algunas funciones de middleware integradas. Pero también podemos crear funciones de middleware personalizadas que podemos poner al frente de nuestra canalización de procesamiento de solicitudes Entonces cada solicitud que obtengamos en el servidor pasará por nuestra función de middleware Con esta función de middleware personalizada, podemos realizar preocupaciones transversales Por ejemplo, podemos hacer registro, autenticación, autorización, etc. Así que la aplicación Express es esencialmente nada más que un montón de funciones de middleware En la siguiente conferencia, te voy a mostrar cómo crear una función de middleware personalizada 4. Crea tu propio middleware de Express: I Así que ahora déjame mostrarte cómo crear una función de middleware personalizada Así que aquí en la línea cinco, estamos agregando JS y función de middleware Después de eso, vamos a llamar a app que use. Una vez más, llamamos a este método para instalar una función de middleware en nuestro pipeline de procesamiento de solicitudes Entonces aquí necesitamos pasar una función que tome una respuesta de solicitud y siguiente, que es una referencia a la siguiente función de middleware en la tubería Entonces simplemente pasamos una función aquí. Ahora en esta función, hagamos un simple registro de Consol. Imaginemos que esta función de middleware es para registrar cada solicitud Entonces realizamos nuestro registro, y luego llamamos Next para pasar el control a la siguiente función middlewab en la tubería Si no haces esto, porque no estamos terminando el ciclo de respuesta a la solicitud, nuestra solicitud terminará colgando Déjame mostrarte lo que pasa. Entonces voy a comentar esta línea, guardar ahora de nuevo en Cartero en esta pestaña, voy a enviar un sencillo STTPgtrQuest a guardar ahora de nuevo en Cartero en esta pestaña, voy a enviar un sencillo STTPgtrQuest a nuestro punto final de cursos. Entonces envía mira, no estamos recibiendo respuesta. Se está cargando. Si miras en la consola, puedes ver nuestro mensaje de registro. Esto indica que nuestra función de middleware se ejecutó Pero debido a que no pasamos el control a otra función de middleware para terminar el ciclo de respuesta a solicitudes, nuestras solicitudes terminan colgando ahí También podemos crear otra función de middleware para realizar Entonces voy a seleccionar este código, duplicarlo, y en la segunda función de middleware, voy a cambiar este mensaje a autenticar Ahora, de vuelta en Cartero, enviemos otra solicitud Ahora, en la terminal, tenemos dos mensajes, registrando y autenticando. Entonces lo que quiero que prestes atención aquí es que nuestras funciones de middleware se llaman en secuencia En primer lugar, se llama a la función de middleware de registro, luego a la función middleware para autenticar al usuario Y finalmente, el fin de ruta, que es otra función de middleware Ahora en términos de codificación creen, cuando quieres crear una función de middleware personalizada, no quieres escribir todo el código dentro app dot archivo JS o módulo de aplicación Debe poner cada función de middleware en un archivo separado o en un módulo separado Así que de vuelta aquí, vamos a crear un nuevo archivo llamado logar dot js Ahora de vuelta en app dot js, vamos a agarrar esta función de middleware aquí, obtenerla, y de vuelta en Logger dot Nosotros pegamos eso aquí. Le damos a esta función un nombre como lob y finalmente, exportamos como este módulo que exporta Ponemos esto a esta función. Entonces este módulo exporta una sola función, ¿de acuerdo? Ahora, de vuelta en app dot js, en la parte superior, cargamos nuestro nuevo módulo. Así periodo barra para indicar la carpeta actual y el registrador Obtenemos el resultado y lo almacenamos en un registrador de llamadas constante. Y luego podemos instalarlo llamando a app que use y pase esta función logger aquí. Ahora entiendes exactamente lo que significa esta línea. Entonces, cuando llamamos a Express JSN, devuelve una función, una función de middleware que tiene tres parámetros, request response, request response, Esa función de middleware pasa el cuerpo del punto de solicitud. Y si hay un objeto JSON, establecerá request en body, y luego pasará el control a la siguiente función de middleware Bien, entonces déjame borrar este comando. De vuelta en App Js. Entonces así es como definimos una función de middleware personalizada en un módulo separado Importa aquí y luego instálalo llamando a la app dot Hughes Podríamos usar la misma técnica para la segunda función de middleware, pero te voy a dejar eso a ti como ejercicio 5. Uso del middleware integrado en Express: En la última conferencia aprendiste a construir middleware personalizado Pero como te dije antes, en Express, tenemos algunas funciones integradas en middleware Uno de ellos es el middleware JCN con el que estás familiarizado, donde pasa el cuerpo de la solicitud Y si hay un objeto JCN, se llenará solicitud en la propiedad body Tenemos otra función de middleware similar que se llama URL codificada Entonces déjame duplicar esta línea. Aquí tenemos express dot URL codificada. Nuevamente, este es un método que llamamos y lo que obtenemos en resultado es una función de middleware Esta función de middleware analiza la solicitud entrante con cargas útiles codificadas por URL Esa es una petición con cuerpo como éste. Entonces tenemos key set to value y otro key set to value. Ahora bien, esto es más un enfoque tradicional. No es algo que usemos tan a menudo en estos días. Básicamente, si tienes un formulario HTML con campos de entrada y publicas ese formulario en el servidor, el cuerpo de tu solicitud se verá así. ¿Bien? Entonces ahí es donde tienes carga útil codificada por URL en el cuerpo de tu solicitud. Ahora, este middleware pasa este cuerpo y rellena el cuerpo del punto de solicitud como un objeto Déjame mostrarte cómo funciona eso. Así que volvamos a Cartero, enviemos una solicitud de correo al Local Os puerto 3,000 APISORE Bien, entonces anteriormente pasaba el Objeto JSON en el cuerpo, así que te dije que seleccionaras un aquí y luego JSON. Sin embargo, en esta demo, vamos a utilizar la URL del formulario codificada aquí. Entonces ahora podemos pasar pares de valores clave en el cuerpo de la solicitud, y se concatenarán cuando esta solicitud se envíe al servidor Entonces la clave que voy a establecer es nombre y el valor es Mc poros SN. Ahora puedes ver que creamos con éxito un nuevo curso en el servidor. Entonces nuestra función de middleware pudo leer nuestra solicitud con carga útil codificada por URL Ahora bien, si miras en la terminal, ves esta advertencia. Body parter deprecated, undefined, extended provide extended option Entonces esta advertencia nos está diciendo que debemos pasar un objeto aquí y establecer extendido a true. Con esto, podemos pasar matrices en objetos complejos usando el formato codificado por URL. ¿Bien? Ahora, finalmente, el último middleware construido que tenemos en Express es estático, y lo usamos para servir archivos estáticos Entonces déjame mostrarte cómo funciona eso. App U express punto estático. Ahora aquí pasamos un argumento, y ese es el nombre de carpeta. En este caso, voy a usar una carpeta llamada Pública. Así que vamos a poner todos nuestros activos estáticos como imágenes CSS y así sucesivamente dentro de esta carpeta. Así que vamos a crear esta carpeta aquí. Público por ahora, sólo voy a agregar un simple archivo de texto aquí. Texto de punto Léame. Y esto es un Read Me cinco. Bien. Ahora con esta función de middleware, podemos volver al navegador y dirigirnos al puerto de Localhost 3,000 slashRmdt puerto de Localhost 3,000 Entonces con este middleware, podemos servir contenido atérico. Y tenga en cuenta que aquí no tenemos público en la URL, por lo que nuestro contenido estérico se sirve desde la raíz del sitio En la próxima conferencia, vamos a ver el middleware de terceros 6. Mejora Express con middleware de terceros: En esta conferencia, voy a presentarles un par de middleware de terceros que tenemos en Express Así que dirígete a exprejs.com en la parte superior. Bajo recursos, puedes encontrar Middleware. Pero estos son los middleware de terceros que puedes usar en tus aplicaciones Pero eso no significa que debas usar todas las funciones de middleware aquí porque cada función de middleware impactará en el rendimiento Si no necesitas la funcionalidad que viene con una función de middleware, no la uses Simplemente va a ralentizar el procesamiento de tu solicitud. Así que dedique un tiempo, eche un vistazo rápido a esta documentación, y vea qué hay para usted en caso de que lo necesite. Ahora en esta lista, el middleware que se considera mejor práctica es considera mejor práctica es Por lo tanto, le ayuda a proteger su aplicación estableciendo varios errores de SCDP Así que vamos a echar un vistazo rápido aquí. Básicamente, todo lo que tenemos que hacer es cargar este módulo de casco usando importar o requerir función. Lo que obtenemos aquí es una función. Entonces llamamos a eso y eso devuelve una función de middleware, y luego vamos a usar eso. Eso es todo lo que tenemos que hacer. Si quieres entender mejor qué hace el casco debajo del capó, realmente necesitas mirar la documentación porque eso está más allá del alcance de este curso. Así que de vuelta en la terminal, instalemos el casco. Ahora, aquí en nuestro módulo de app en la parte superior, cargamos casco, obtenemos el resultado y lo almacenamos en una constante llamada casco. Esta es la función. Entonces vamos a llamar a eso y pasarlo al método de uso de punto de aplicación. Entonces casco como este. El otro middleware de terceros que te puede resultar útil es Morgan Usamos Morgan para registrar SDDPRquest. Déjame mostrarte cómo funciona eso. Así que una vez más, NPM instala a Morgan. Ahora, aquí en la parte superior del archivo, cargamos Morgan usando la función requerida. Muy sencillo. Y luego finalmente, úsalo así. Entonces Morgan es una función, y aquí puedes especificar varios formatos. Voy a usar el más simple que es pequeño. Nuevamente, es necesario mirar la documentación para ver varias opciones que están disponibles para usted. Entonces ahora, de vuelta en la terminal, ejecutemos la aplicación con Morgan en su lugar. Cada vez que enviemos una solicitud al servidor, ésta será bloqueada. Entonces aquí, voy a enviar una simple solicitud get a nuestro punto final de cursos. Ahora mira en la terminal, Morgan bloqueó nuestra solicitud STTP, y este es un formato diminuto Es muy, muy sencillo. Por lo que enviamos una solicitud GTP get para este punto final, el resultado fue un código de estado de 200, lo que significa exitoso Y este es el tiempo que tardó en responder a esta solicitud. Si quieres más detalles, estableces un formato diferente, y por cierto, por defecto, Morgan bloqueó la solicitud en la consola. Pero también puedes configurarlo, escribirlo en un archivo de registro. Nuevamente, recuerde que cuando active esta función, tendrá un impacto en su canalización de procesamiento de solicitudes. Entonces quizás no quieras hacer esto en producción, o quizás quieras habilitarlo solo en ciertas situaciones. Por ejemplo, puede tener un archivo de configuración cuando implementa esta aplicación en la producción. En ciertas situaciones, puedes encenderlo por un corto periodo de tiempo y luego apagarlo. En la próxima conferencia, te voy a mostrar cómo trabajar con diferentes entornos como desarrollo, las pruebas y la producción. 7. Configurar Express para diferentes entornos: En una aplicación más compleja o empresarial, necesitas saber en qué entorno se está ejecutando tu código. Se trata de un entorno de desarrollo o de producción. Quizás desee habilitar o deshabilitar ciertas funciones en función del entorno actual. Por ejemplo, imaginemos que tenemos que habilitar tala de la solicitud del PIB solo en el entorno de desarrollo, en una máquina de desarrollo, pero no en la producción. Entonces déjame mostrarte cómo hacer esto. Anteriormente aprendiste sobre este objeto proceso. Se trata de un objeto global en nodo que nos da acceso al proceso actual. Este objeto de proceso tiene una propiedad llamada N, que nos da las variables de entorno. Ahora tenemos una variable de entorno estándar llamada nodo subrayado N, y esta variable de entorno devuelve el entorno para esta aplicación de nodo Si no se establece aquí, vamos a ponernos indefinidos. Alternativamente, podemos establecer esto desde el exterior. Podemos establecer esto al desarrollo a pruebas, a la escena o a la producción. Entonces para esta demostración, vamos a registrar esto en la consola. Así consola dot log. Voy a usar el carácter de backtick para definir una cadena de plantilla Nodo subrayan N. Signo de dólar, llaves collie, y aquí está nuestro proceso N, nodo subrayado N. Ahora tenemos otra forma de obtener el entorno actual, y eso es a través Así que este objeto app tiene un método llamado get que usamos para obtener varias configuraciones sobre esta aplicación. Ahora, una de las configuraciones es N. Este método utiliza internamente la variable de entorno para detectar el entorno actual. Sin embargo, si esta variable de entorno no está establecida, Esto devolverá el desarrollo por defecto. Déjame mostrarte cómo funciona eso. Así consola dot log, B tacle la etiqueta es app Y aquí agregamos signo de dólar con Colbass y luego app dot gat de N. Ahora, vuelta en terminal, mira, nuestra variable de entorno no está establecida, así que eso es indefinido Pero app dot gat está devolviendo el desarrollo por defecto. ¿Bien? Esto es una diferencia. Ahora bien, ¿qué enfoque elegir es puramente tu preferencia personal? Ahora, en esta demostración, queremos habilitar el registro de SDDPRquest solo en una Para que podamos escribir código así. Si app dot consigue con desarrollo, entonces vamos a habilitar a Morgan. Y también para tabugging. Quiero mostrar algo en la consola. Así que Morgan habilitó, ¿de acuerdo? Ahora, eliminemos estas dos líneas. Ya no los necesitamos. De vuelta en la terminal porque esta es mi máquina de desarrollo, se puede ver que Morgan está habilitado. Detengamos este proceso, establecemos la variable de entorno a producción, volvamos a ejecutar la aplicación y luego verás que Morgan no estará habilitado. Así que detenga este proceso con Control y C. Configuramos nuestra variable de entorno usando Exportar en Mac o configuramos en Windows al usar el símbolo del sistema. Y dólar al usar Power Shell. Entonces nodo subrayado, establecemos esto a producción. Ahora, ejecutemos la aplicación una vez más. Entonces no hay mod app Bien, mira, solo obtenemos este mensaje escuchando en el puerto 3,000. No tenemos Morgan Enable. Entonces así es como puedes saber si tu código se está ejecutando en una máquina de desarrollo, pruebas, puesta en escena o en una máquina de producción. 8. Técnicas avanzadas de configuración: Entonces, en la última conferencia, aprendes a detectar el entorno en el que se está ejecutando tu aplicación. Un tema que va mano con los entornos es un tema de almacenar los ajustes de configuración para la aplicación y anular esos ajustes en cada entorno Por ejemplo, en tu entorno de desarrollo, vas a utilizar las diferentes bases de datos o servidor de correo. En esta conferencia, te voy a mostrar cómo almacenar los configuración para tu aplicación y sobrescribirlos en cada entorno. Ahora hay varios paquetes de nodos por ahí para administrar la configuración. El más popular es RC. Ahora, si buscas npmrcrnpms.com, RC para que podamos ver que este paquete ha sido descargado más Es un paquete muy popular. Pero mi preferencia personal es otro paquete que no es tan popular, aunque tiene un diseño muy limpio y elegante y es realmente fácil de usar. Así que busca NPM Config nuevamente, aquí npmjs.com Por lo que este paquete se ha descargado más de 1 millón de veces por semana, pero tiene una comunidad muy activa. Así que de vuelta en el terminal, vamos a instalar el módulo config. Hermoso. Ahora, de vuelta al proyecto aquí, vamos a crear una carpeta llamada Config. En esta carpeta, podemos tener un archivo de configuración predeterminado. Entonces agreguemos un nuevo archivo llamado AJCN predeterminado. Así que aquí podemos tener un objeto JCN para definir los ajustes de configuración predeterminados Por ejemplo, vamos a tener una configuración aquí llamada Nombre. Ese es el nombre de nuestra aplicación. Ahora, de vuelta en la carpeta de configuración, agreguemos otro archivo, punto de desarrollo Gs. En este archivo, podemos definir la configuración específica del entorno de desarrollo. Como parte de esto, podemos anular los ajustes que definimos en GSN por defecto También podemos agregar ajustes adicionales. Entonces aquí puedo cambiar el nombre. Puedo anularlo diciendo que mi desarrollo de aplicaciones Express también podemos agregar propiedades adicionales aquí, y estas propiedades también pueden ser objetos complejos. Por ejemplo, podemos tener una propiedad llamada mail, donde almacenamos información sobre nuestro servidor de correo. Así que aquí podemos tener post, y vamos a configurar esto para que se desarrolle en el servidor de correo. Del mismo modo, podemos crear otro archivo de configuración llamado production. Entonces producción punto JSON ahora voy a volver en desarrollo o JSN, copiar todo esto, pegarlo en la producción, y cambiar el nombre de la aplicación así como la dirección del servidor de correo Así Rod servidor de correo. Así que con este paquete de nodos, se puede ver fácilmente la configuración por defecto así como la configuración para cada entorno. Te da una estructura muy limpia. Ahora, de vuelta en nuestra app punto JS en la parte superior, cargamos el módulo de configuración. Y guárdala en una constante llamada config. Y con esto, podemos obtener fácilmente diversos ahorros para nuestra aplicación. Entonces echemos un vistazo a algunos ejemplos. Configuración. Voy a hacer un nombre de aplicación de registro de puntos de consola. Ahora aquí podríamos usar una cadena de plantilla. Eso realmente no importa. La forma en que usamos este objeto config es así. Entonces tiene un método, y aquí como argumento, especificamos el nombre de una propiedad de configuración. Así nombre. Ahora, dupliquemos esto. La otra propiedad que quiero mostrar es servidor de correo. Para ello, necesitamos acceder a la configuración aquí, host, que es parte del correo. La forma en que hacemos esto es usando la notación de puntos al igual que acceder a las propiedades de un objeto. Entonces quieres obtener host de correo. ¿Bien? Ahora, de vuelta en la terminal, voy a poner esta máquina en el entorno de desarrollo. Entonces dólar y columna nodo subrayan N. Ponemos esto a desarrollo y luego ejecutamos nuestra aplicación Para que pueda ver que el nombre de la aplicación está configurado en My Express desarrollo de aplicaciones. Esta configuración viene de nuestro punto de desarrollo JCNFLE. Del mismo modo, nuestro servidor de correo es Dave Mail Sour. ¿Bien? Ahora bien, si cambiamos el ambiente a producción, vamos a ver diferentes valores. Entonces dólar y columna, nodo subrayan N, establecemos esto en producción y ejecutamos la aplicación una vez más Mira, esta vez nuestro servidor de correo es Prod mail Sur. Entonces, con este paquete de notas, puede almacenar fácilmente los ajustes de configuración para su aplicación. Sin embargo, no debe almacenar los secretos de la aplicación en estos archivos de configuración. Por ejemplo, no debes almacenar la contraseña de tu base de datos o tu servidor de correo porque cuando registras tu código fuente a un repositorio, esa contraseña o secreto es visible para cualquiera que tenga acceso a ese repositorio de control de origen. De hecho, una de las compañías financieras famosas en EU fue pirateada porque alguien registró una contraseña en el repositorio de control de fuentes Entonces, la forma en que tratamos estos secretos es almacenándolos en variables de entorno. Déjame mostrarte cómo funciona eso. Así que de vuelta en la terminal, definamos una variable de entorno para almacenar la contraseña de un servidor de correo. Entonces contraseña de dólar y columna, configuramos en uno, dos, tres, cuatro. Ahora, para evitar que esta variable de entorno conflicto con otra variable de entorno, es mejor prefijarla con el nombre de nuestra aplicación. En esta demo, digamos que el nombre de nuestra aplicación es app. Entonces agregamos el subrayado de la aplicación como prefijo. Bien. Entonces, en el entorno de desarrollo, configuramos manualmente esta variable de entorno. Y también en el entorno de producción, lo más probable es que tengamos un panel de configuración para almacenar nuestras variables de entorno. Así que almacenamos todas estas contraseñas y secretos en nuestras variables de entorno y luego las leemos usando nuestro módulo de configuración. Ahora, de vuelta al proyecto en la carpeta de configuración, necesitamos agregar otro archivo llamado variables de entorno personalizadas. Asegúrate de deletrearlo correctamente. El nombre de este archivo es muy importante. Así que las variables de entorno personalizadas, TSN. Y en este archivo, definimos el mapeo de los ajustes de configuración a las variables de entorno. Entonces voy a ir en nuestro archivo TSN de desarrollo, copiar todo esto en este nuevo archivo Ahora, digamos aquí por la propiedad masculina dentro de eso, vamos a tener una propiedad llamada contraseña. Bien. Ahora queremos mapear esto a la variable de entorno que creamos que era la contraseña subyacente de la aplicación, ¿bien? Ahora no necesitamos alojar porque no vamos a mapear esto a una variable de entorno. El valor se define en uno de nuestros archivos de configuración, y por esa misma razón no necesitamos nombre. Entonces en este archivo, variables de entorno personalizadas, solo tenemos el mapeo, el mapeo de nuestros ajustes de configuración a variables de entorno. Ahora, de vuelta en app dot s, vamos a duplicar esta línea y mostrar la contraseña del servidor de correo. Entonces correo contraseña, y lo obtenemos de la propiedad de contraseña masculina. Entonces, este objeto configurado busca varias fuentes para encontrar un valor para esta configuración. El origen puede ser un archivo de configuración, archivo adyacente. Puede ser una variable de entorno. También puede ser un argumento de línea de comandos. Para eso, necesitas mirar la documentación tú mismo. Ahora, de vuelta a la terminal, ejecutemos la aplicación. Bien, mira, nuestra contraseña masculina es 1234. Y esto se leyó de una variable de entorno, no de un archivo de configuración. Nuevamente, este paquete de conflicto tiene muchas características útiles, y te dejo a ti leer la documentación y conocer más sobre este paquete. 9. Solución de problemas y depuración de aplicaciones Express: Anteriormente en esta sección, escribimos este código para ver si estamos en el entorno de desarrollo. Si Morgan logramos el STDPRquest y también logramos este mensaje en la consola Entonces este registro de puntos de consola es el amigo más antiguo del programador de JavaScript. Lo usamos todo el tiempo para depurar. El problema con este enfoque, sin embargo, es que a veces cuando terminamos con ellos, los eliminamos o los comentamos. A veces más tarde, es posible que los necesitemos. Entonces tenemos que volver a escribir el código o eliminar el comando. Este enfoque es muy tedioso. Una mejor manera de registrar mensajes con el propósito de depurar es usar el paquete de depuración en nodo con Tbug Vamos a reemplazar todas estas sentencias de registro de punto de consola con una llamada a una función de depuración, y luego podremos usar una variable de entorno para habilitar o deshabilitar la depuración. De esta manera, no tenemos que volver a nuestro código y modificar el código. No tenemos que eliminar este registro consolado o declaraciones de depuración No tenemos que elogiarlos. Podemos controlarlos desde el exterior usando una variable de entorno. Pero lo más importante, también podemos determinar el nivel de información de depuración que queremos ver A lo mejor alguna vez estamos trabajando en un problema de base de datos. Quizás solo queremos ver esa información de depuración relacionada con la base de datos No tienes que volver al código y modificar todas estas declaraciones consoladas o log Entonces déjame mostrarte cómo usar el paquete de depuración. De vuelta en el terminal, instalemos debug. Hermoso. Ahora volvamos a nuestro módulo de aplicaciones en la parte superior, vamos a ralentizar el módulo de depuración. Esta función requerida aquí devuelve la función. Entonces llamamos a esta función y le damos un argumento. Y este argumento es un espacio de nombres arbitrario que definimos para la depuración Por ejemplo, podemos definir un espacio de nombres como el inicio de aplicaciones. Ahora, cuando llamamos a esta función con este argumento, obtenemos una función para escribir mensajes de depuración en este espacio de nombres Entonces llamemos a esa función, depurador de inicio. Potencialmente podemos tener otro depurador para depurar mensajes relacionados con la base de datos Entonces, una vez más, cargamos ese módulo de depuración. Obtenemos una función. Llamamos a esa función, le damos un espacio de nombres como app DB, y esto devolverá una función de depuración Entonces lo conseguimos y lo almacenamos en el depurador DB. ¿Bien? Vamos a reemplazar esta sentencia de registro de punto de consola con una llamada para iniciar la función de depurador Así que el depurador de inicio así. Ahora, potencialmente en algún lugar de la aplicación, podemos tener algún trabajo de base de datos, y ahí es posible que necesitemos escribir alguna información de depuración para que podamos usar nuestra otra función depuradora Así que el depurador DB, conectado a la base de datos, algo así Ahora volvemos a la terminal y utilizamos una variable de entorno para determinar qué tipo de información de depuración queremos ver en la consola Entonces aquí establecemos una variable de entorno llamada Ebub. Configuramos esto para el inicio de la aplicación. Eso significa que con esta línea, vamos a ver sólo los mensajes de depuración que forman parte de este espacio de nombres Inicio de aplicaciones. Ahora bien, si ejecutas la aplicación, mira, tenemos el inicio de la aplicación y aquí nuestro mensaje. Ahora la próxima vez que ejecute esta aplicación, tal vez no quiera ver ninguna información de depuración, así podemos restablecer esta variable de entorno a nada Vuelva a ejecutar la aplicación. Mira, ya no vemos este mensaje de depuración, o es posible que queramos ver mensajes de depuración para múltiples espacios de nombres Así podemos establecer nuestra variable de entorno para inicio de la aplicación, coma AppNTV Con esto, veremos los mensajes de depuración en estos dos espacios de nombre O si quieres ver todos los mensajes de depuración para nuestro espacio de nombres de aplicaciones, podemos usar un comodín De esta manera, no tenemos que repetir cada una de ellas individualmente. Ahora cuando ejecutamos la aplicación, mira, vemos los mensajes en diferentes espacios de nombres. Así que el inicio de la aplicación y la aplicación DV. Y lo bonito de este módulo de depuración es que codifica por color el espacio de nombres, por lo que podemos distinguir fácilmente varios mensajes de depuración No lo entendemos con Console o platicar. Y una última cosa en esta demo en particular, creé dos funciones de depuración, startup y DVTBugger En escenarios del mundo real, es posible que no necesite necesariamente múltiples funciones de depuración en el mismo archivo o en el mismo módulo Si ese es el caso, puede simplificar su código cambiando el nombre de esta función depuradora para depurar Por ejemplo, en este archivo, digamos que no tenemos ningún trabajo de base de datos. Entonces voy a borrar esto. Solo queremos escribir mensajes de depuración sobre el inicio de la aplicación Así que vamos a eliminar esta función TB Tbugger. Ahora podemos renombrar esta función debugger de inicio para depurar Entonces, mira, eso es más corto que montar el registro de puntos de la consola, y nos da mucha más potencia y control sobre la cantidad de información de depuración que queremos ver Así que prefiera el módulo de depuración a las sentencias de registro de puntos de consola. 10. Vistas dinámicas con motores de plantillas: En todos los puntos finales que hemos implementado hasta ahora, devolvemos objetos GSN en la respuesta A veces, sin embargo, necesitas devolver el marcado HTMR al pin, y ahí es donde usas un motor de plantillas Hay varios motores de plantillas disponibles para aplicaciones expresas. Los más populares son PAG, que solía llamarse JD También tienes Mustach y EGS. Cada motor de plantillas tiene una sintaxis diferente para generar HTML dinámico y devolverlo al cliente Juega esta demo, te voy a mostrar cómo usar PAC que generan un HTML dinámico y lo devuelven al cliente. Entonces primero, instalemos PAC. Hermoso. Ahora, de vuelta en nuestro módulo de aplicaciones, necesitamos configurar el motor de visualización para la aplicación. Entonces llamamos app dot set. El nombre de la propiedad que necesitamos establecer es motor de espacio de visión, y el nombre de nuestro motor de visión o motor de plantillas es PAC Entonces cuando establecemos esto, express cargará internamente este módulo, así que no tenemos que requerirlo. Bien, ahora, hay otra configuración que no es obligatoria. Es opcional, solo si quieres anular la ruta a tus plantillas. Entonces app que establece, el nombre de la propiedad es views, y el valor es la parte donde almacenamos las plantillas. Por lo que el valor predeterminado son las vistas de punto. Eso significa que debes poner todas tus vistas o todas tus plantillas dentro de una carpeta llamada views, que debería estar en la raíz de la aplicación. Nuevamente, este es un escenario optal. Ese es el valor predeterminado, así que no tenemos que establecer eso. Ahora, agreguemos aquí una nueva carpeta, views. Dentro de esta carpeta, agreguemos un nuevo archivo. Podemos llamar a ese punto índice Pug. Con PAG, podemos definir nuestra plantilla usando una sintaxis como esta. Entonces podemos tener un elemento TML. Entonces dentro de eso podemos tener cabeza, y luego podemos tener el elemento title y podemos establecer un valor para esto dinámicamente usando la sintaxis. Entonces agregamos un signo igual y luego nombre de una variable que vamos a establecer en tiempo de ejecución. Te voy a mostrar cómo funciona eso más tarde. Ahora en paralelo a la cabeza, queremos tener otro elemento llamado cuerpo. Y dentro de eso, queremos tener uno H. Y queremos ver el valor para esto dinámicamente usando una variable llamada message. Ves bug como una sintaxis más limpia que STMO normal. No tenemos esos elementos de apertura y cierre. Por supuesto, a algunas personas les encanta, a algunas personas lo odian. Pero eso aparte, veamos cómo podemos convertir esto a un STMO regular y devolverlo al cliente Así que de vuelta en nuestro módulo app, antes definimos una ruta para la raíz de la aplicación. Entonces aquí le enviamos un mensaje sencillo al cliente. Hola. Ahora mismo, queremos reemplazar esto con un marcado HTML y devolverlo al cliente Entonces, en lugar de enviar método, usamos render. Entonces respuesta punto render. Ahora como primer argumento, especificamos el nombre de nuestra opinión. En ese caso, index porque el nombre de nuestro archivo es index dot pug Como segundo argumento, pasamos un objeto, y este objeto incluye todos los valores para los parámetros que hemos definido en nuestra plantilla, como title y message. Entonces aquí voy a establecer dos propiedades Title My Express app y mensaje Hola. Eso es todo lo que tenemos que hacer. Así que ahora iniciemos de nuevo la aplicación y dirijamos al host Local por 3,000. Mira, obtenemos el marcado ML. Podemos verificar eso al mirar la fuente de este discurso. Lo que ves aquí es nuestra plantilla de Puck convertida a HTML estándar Entonces tenemos título de cabeza TML. Este valor se inserta dinámicamente en tiempo de ejecución, y luego junto a eso, tenemos By. Y dentro de esto, tenemos este H un elemento. Entonces, si quieres devolver el marcado TML a la moneda, usas un motor de visión Nuevamente, hay varios motores de vista disponibles como Pug, EJS, MastAC y Pero cuando está construyendo servicios de descanso para el back end de sus aplicaciones cliente, realmente no necesita un motor de visión o un motor de plantillas Acabo de cubrir este tema porque quería que mi curso de nodo fuera integral. A continuación, voy a hablar de que los datos fueron la integración. 11. Integración de bases de datos con Express.js: Bien, vamos a la integración de bases de datos. En realidad, tenemos una sección separada sobre este tema donde te enseñaré en detalle cómo trabajar con una base de datos MongoDB Pero en esta conferencia, solo quiero señalar cuáles son las diversas opciones de integración de bases disponibles para ti cuando usas Node y Express. Entonces en el sitio web Express, si vas a guiar y luego a la integración de bases de datos, en esta página, puedes ver varios controladores de base de datos que están disponibles para que los uses. Puedes usar Cassandra, Out Base, CQL, Bango, Oracle, Redis, quel Sur, Elastic Search, Elastic Search Entonces hay varias opciones disponibles aquí. Para cada uno de estos, puedes ver algún código de muestra. Entonces echemos un vistazo a MongoDB. Básicamente, lo que hay que hacer es instalar el driver para trabajar con Mongo Entonces NPM instala MongoDB, y luego lo carga usando la función requerida Entonces obtendrás una API simple para conectarte a Mongo, y luego podrás acceder a varias colecciones y así sucesivamente Trabajar con otras bases de datos es lo mismo. Instalamos un driver, y luego puedes obtener un módulo con una API simple. Ahora, en el caso del mango, específicamente, hay otro paquete que se llama mangosta, que está construido sobre mango, encuentra encima de este paquete Mongo DB Usamos mangosta porque nos da una API más simple. Nuevamente, más adelante en este curso, vamos a tener una sección integral sobre el trabajo con mangosta y mangosta 12. Protege las aplicaciones de Express con autenticación: Hasta el momento, hemos cubierto mucho terreno sobre Express. Pero ¿qué pasa con la autenticación? Bueno, la autenticación está fuera del alcance de Express porque Express es un framework mínimo y ligero, y no tiene una opinión sobre la autenticación. Entonces más adelante en el curso, vamos a tener una sección integral sobre autenticación y autorización. Entonces te mostraré cómo asegurar tu API y puntos. 13. Mejores prácticas para estructurar aplicaciones de Express: Entonces este es un código que hemos escrito en app dot Js a lo largo de esta sección. Si miras aquí, tenemos un archivo muy débil con 92 líneas de código, y esta es una aplicación muy sencilla. En la aplicación del mundo real, no quieres escribir todo ese código dentro de app dot JS. Entonces en esta conferencia, voy a mostrarte cómo estructurar adecuadamente tu aplicación. Lo primero que queremos hacer es sacar todo el código para esta API de cursos y ponerlo en un archivo separado. En otras palabras, por cada parte lógica de nuestra aplicación, para cada punto final de API, queremos tener un archivo separado o un módulo separado. Entonces todas las rutas para trabajar con cursos serían en cursos punto JS, y todas las rutas para trabajar con, digamos que los autores deberían estar en autores punto Gs. Cuando la raíz del proyecto, vamos a crear una nueva carpeta, llamarlo rutas. Aquí teníamos un nuevo archivo de cursos dot js. Ahora, de vuelta en app dot js, seleccionemos todo el código para trabajar con cursos. Ahora, recorta los cursos, pégalo aquí. Ahora de vuelta en app dot js. Puedes ver aquí solo tenemos 36 líneas. Pero primero, terminemos de refactorizar las rutas de los cursos. Así que cortemos esta línea y volvamos a los cursos punteamos JS en la parte superior. Aquí, primero, necesitamos cargar Express. Tan constante Express, lo requerimos así. No APGs llamamos Express como una función. Y tenemos un objeto app, ¿verdad? Pero este enfoque no funciona cuando se separa la ruta en un módulo separado. Entonces aquí necesitamos usar un router. Entonces este expreso tiene un método llamado router que devuelve el objeto router. Ahora aquí, voy a cambiar el nombre esta aplicación a router para mayor claridad. Así que presione F dos Enrutador. Entonces la diferencia es que en este módulo en el módulo de cursos, en lugar de trabajar con el objeto app, trabajamos con el objeto router. ¿Bien? Ahora, finalmente, al final de este módulo, exportamos este router. Entonces módulo que exporta, lo configuramos a este router. Entonces, en resumen, obtenemos el enrutador en la parte superior, le agregamos rutas, y finalmente exportamos el enrutador al final del módulo. ¿Bien? Ahora, necesitamos cargar este módulo de cursos dentro del módulo de la aplicación. Así que de vuelta en App dogs aquí, carguemos el módulo de cursos. Por lo tanto, requieren cursos de ruta de carpeta actuales. Ahora, obtenemos esto y lo almacenamos en una constante llamada cursos. Y finalmente, una vez que carguemos este módulo, necesitamos llamar a app that use. Aquí, necesitamos aportar dos argumentos. El primer argumento es un camino, así que recorta los cursos de APS Y el segundo argumento es nuestro objeto router que importamos. Eso son cursos. Básicamente, le estamos diciendo a Express que para cualquier ruta que comience con cursos AP, use este enrutador, el enrutador que cargamos desde el módulo de cursos. Y con esto, podemos volver a nuestro módulo de cursos y hacer nuestras rutas un poco más cortas. Así que volvamos al módulo de cursos en la parte superior, ver cada ruta aquí tiene esta parte cursos API. No queremos repetir esto en todas partes porque en app dot JS, le dijimos a todas partes porque en app dot JS, Express que cualquier ruta que comience con cursos de slash API slash debería ser manejada por este router de cursos Así que de vuelta en el módulo de cursos, podemos deshacernos de todos estos cursos API. Entonces para la primera ruta, que es para conseguir todos los cursos, nuestra ruta cambiará a solo slash Lo mismo para la segunda ruta. Para la tercera ruta, tenemos un parámetro. Así que solo agregaremos ID de columna. De igual manera, para la ruta de eliminación, solo necesitamos ID. Y por último, lo mismo para la última ruta aquí. Para que veas que nuestras rutas son mucho más sencillas ahora. Ahora de vuelta en app dot Js. Ahora aquí tienes un ejercicio sencillo para ti. Quiero que refactorizaran esta ruta a la playa del hogar y la pongan en un archivo separado Entonces, pausa el video, haz este ejercicio, y luego podrás regresar, seguir viendo. Bien, así que esto es lo que tenemos que hacer. Aquí en la carpeta de ruta, voy a agregar un nuevo archivo. Llamemos a esto home dot js para SreeoAdepress. Por lo que requieren Express. Entonces conseguimos un router. Así que el router es el router Express. Ahora, de vuelta en la app punto JS, conseguimos cortar esta ruta y pegarla aquí. Pero en lugar de app, adjuntamos a este router. Y por último, exportamos el router. Así módulo dot Exportaciones, lo configuramos a este router. Y por último, volvemos a app dot JS y cargamos este nuevo módulo. Entonces en la parte superior, aquí es donde cargamos nuestro módulo de cursos. Carguemos el módulo home. Por lo que requieren casa. Por último, aquí donde estamos agregando el middleware, llamamos app que usamos decimos para cualquier ruta que comience con slash, use el Todo bien. Ahora bien, si nos fijamos en app dot JS, todo lo que tenemos aquí es simplemente el código de inicio de nuestra aplicación. Ahora, una última cosa antes de terminar esta conferencia. Así que antes, creamos este middleware logger. Lo colocamos en un módulo separado y exportamos esta función al final de este módulo, ¿verdad? Ahora, en términos de estructurar tu aplicación, es posible que tengas múltiples funciones de middleware Entonces es mejor ponerlos todos en una carpeta llamada middleware Así que aquí en la raíz de la aplicación, creamos otra carpeta llamada middleware y movemos este logger dentro de esta Whoa y esto también significa que deberíamos ir a la app o a Js en la parte superior donde cargamos este middleware, deberíamos cambiar la ruta a