Servidor Express
Descripción
Montar un servidor web mediante paquetes propios de node
Objetivos
Entender la arquitectura de Express
Middleware
Uso de paquetes para extender la funcionalidad de Express
Creación de un servidor web que sirva:
Contenido estático
Contenido dinámico en base a templates
Content-type en JSON (para API posterior)
Empezamos proyecto
Documentación
Extensa pero concisa
Numerosos ejemplos
express
Instalar express mediante uno de los comandos siguientes:
Creamos el fichero server.js con el siguiente código:
Ejecución
Debería ejecutarse de cualquiera de las siguientes maneras:
Utiliza nodemon para evitar reinicios al cambiar código
Prueba funcionamiento
Se echa de menos algún tipo de mensaje de arranque
Mira en la documentación como añadir esa opción
Cuando el método listen haya terminado...
Método listen
Permite añadir más parámetros
Un parámetro de tipo función (función de callback)
Es el único parámetro de este tipo, así los diferencia
Añadir otra ruta
Utiliza el plugin ExpressSnippet de Visual Code para completado
Comprueba su funcionamiento con el app.listen
Datos nueva ruta:
URL: /contactar
Muestre el mensaje Página para contactar
Código ruta contactar
Uso de JSON
Vamos a devolver un JSON en vez de un string:
Comprobar JSON
Utiliza algún plugin de formateo de JSON dentro del navegador
El JSON puede ser más complejo que el anterior, por ej:
Comprueba como cambia el content type
Utiliza las herramientas de desarrollo
El cambio lo hace directamente Express
Los datos en JSON podrían estar:
En una variable
Incluso en otro fichero
Recibirse vía API
....
Middleware
Son funciones que:
Se registran por express mediante app.use y se ejecutan en orden
Tienen acceso al objeto de solicitud (req), al objeto de respuesta (res) y a la siguiente función de middleware (next)
Ejemplo de middleware
Podemos crear un middleware que guarde traza de las fechas de accesos
Para ver las propiedades que nos hacen falta podemos usar la API de Express
Es importante el orden
Entre los middlewares
Antes que las peticiones get, post....
Logs a fichero
Completa el middleware anterior para que guarde los cambios en el fichero server.log
Piensa donde se debe poner el next() y si debes utilizar un método síncrono o asíncrono
Solución logs a fichero
Más sobre logs
Podemos querer utilizar distintos transports o medios para logs
Ficheros
Consola
Distintos niveles (debug, err, warning...)
Distintos formatos de visualización (colores, negrita...)
Con posibilidad de ejecución de queries
....
Lo mejor es usar algún paquete que ya exista
Uso de contenido estático
Crea un fichero .html en la carpeta public
Ayúdate de emmet: ! + tab
Express ya tiene un middleware integrado para contenido estático
No deja de ser una función como las vistas anteriormente
No necesitamos importarla mediante un require
Una vez importado, hace un send() si existe el fichero, si no, un next()
Configuración express para contenido estático
__dirname es la raíz del proyecto
path.join para que sea multiplataforma
Podríamos configurar un directorio virtual (static para public)
Template engine
Mostrar un index.html está bien pero puede que necesitemos:
Inyectar valores en el html
"includes" para footer, header... (patrón diseño DRY)
Tenemos que elegir un motor de plantillas
Utilizaremos hbs que es un wrapper de handlebars
Configuración de hbs
Instalación
Configuración
No hacemos un require porque no usamos ninguna función
express lo llama internamente
Indicamos a nodemon los tipos de ficheros a monitorizar (por defecto solo js):
Uso de hbs
Definimos una carpeta views donde irán las templates
Fichero views/contactar.hbs:
Ejecutamos el método res.render() en vez de res.send()
Admite un objeto como segundo parámetro para pasar variables
Partials mediante handlebars
Registramos el directorio donde se van a guardar:
Creamos fichero views/partials/footer.hbs:
Lo incluimos dentro de nuestro fichero views/contactar.hbs:
Ejercicio templates
Añade una página de inicio además de contactar
Ambas deben cargar su correspondiente template que además cargará un partial para el header y otro para el footer
Uso de helpers
Se registran funciones que devuelven un código dinámico
Se pueden inyectar en cualquier template o partial.
Podríamos eliminar el paso de currentYear a las vistas y utilizar el helper:
¿Continuamos?
Ya estamos preparados para utilizar express para crear una API
Last updated
Was this helpful?