Memegram
Vamos a darle una vuelta a la aplicación de memegram. Memegram ha sido una aplicación "desconectada": el cliente que necesita un recurso, se conecta al servidor, pide el recurso en questión, lo recibe y se desconecta. El servidor no tiene la capacidad de notificar cambios al cliente. Es el cliente el que dirige el cotarro.
Si queremos dotar a memegram una respuesta a cambios en tiempo real, necesitamos que la conexión con el servidor sea constante para que éste (el servidor) pueda enviarnos notificaciones de cambios.
Hello websockets 🖖.
Base de datos
npm
mysql2
Para poder utilizar la base de datos se debe instalar el paquete mysql2
npm install mysql2
dotenv
Para gestionar las variables de entorno se debe instalar el paquete dotenv
npm install dotenv
Para poder utilizar las variables de entorno se debe configurar el archivo .env
express
Para poder utilizar el servidor se debe instalar el paquete express
npm install express
helmet
Helmet es un middleware que se encarga de proteger la aplicación de ataques de seguridad.
Para poder utilizar el middleware helmet
se debe instalar el paquete helmet
npm install helmet
morgan
morgan es un middleware que permite ver las peticiones que se hacen al servidor.
Para poder utilizar el middleware morgan
se debe instalar el paquete morgan
npm install morgan
socket.io
Socket.io es una librería que habilita la comunicación entre el servidor y el cliente.
Está construida sobre el protocolo WebSocket y nos provee garantías adicionales como fallback a HTTP long-polling o reconexión automática (entre otros).
Para poder socket.io
se debe instalar el paquete socket.io
npm install socket.io
node
index.js
En este archivo se encuentra la lógica de la aplicación.
Seguimos manteniendo la implementación de nuestro servicio REST y le añadimos la capacidad de conectarse vía socket.io con el servidor y mantener la conexión activa.
public
en la línea 51 del index.js
se está habilitando el uso de static
para que express exponga contenido estático. En nuestro caso estamos exponiendo el contenido de la carpeta public
Aquí tenemos 3 archivos: index.html
, index.js
y style.css
index.html
En este archivo se encuentra el contenido de la página web.
style.css
En este archivo se encuentra el estilo de la página web. Un poco de 🌈 pinta y colorea 🌈 para que la página no sea una chusta.
index.js
Aquí definimos toda la lógica que modificará el DOM del cliente apoyandose de la librería socket.io
para mantener la conexión activa con el servidor.
*.route.js
Mantenemos la lógica de nuestras rutas para dar soporte al servicio REST.
*.dao.js
Se han añadido algunas funciones más de acceso a la base de datos.
Los siguientes dao heredarán de esta clase e implementarán funciones/consultas específicas para cada uno de los DAO.