Crear una Api con NodeJS, Express y MySQL
Introducción
Descripción
En esta publicación vamos a crear una Api con NodeJS, Express y MySQL.
También utilizaremos Bcrypt, Cors, Dotenv, JsonWebToken, Jest y Supertest, pero esto en la siguientes publicaciones de la lista.
Requisitos previos
Para poder ejecutar un backend en NodeJS, necesitamos instalar NodeJS en nuestro sistema operativo, si ya lo tenemos instalado, podemos continuar con la publicación. Si no lo tenemos instalado podemos descargarlo e instalarlo entrando en el siguiente link.
Crear Base de Datos
Ahora, vamos a crear una base de datos en MySQL y crearemos la tabla documentos.
Crear proyecto
Crear un nuevo proyecto
Vamos a crear un nuevo proyecto, para esto, vamos a abrir un terminal y pondremos el siguiente comando:
npm init
Instalar los paquetes necesarios
Ahora, vamos a instalar los siguientes paquetes:
Paquete | Uso |
---|---|
Nodemon | . |
Express | . |
MySQL2 | . |
Node Input Validator | . |
Vamos a instalar Nodemon, Express, MySQL y Node Input Validator.
Para poder utilizar Nodemon en cualquier proyecto, lo instalaremos globalmente.
npm install express mysql2 node-input-validator
npm install -g nodemon
Resultado
Añadiremos el siguiente comando dentro de scripts, el cual utilizaremos para encender localmente el backend con NodeJS.
Esto nos dejará un package.json parecido al siguiente:
"start": "nodemon server.js"
Configuración Inicial
Crear Server.js
Vamos a empezar creando un nuevo archivo, server.js en el cual importaremos express, y más adelante los controladores y las rutas.
En este archivo, pondremos la configuración de NodeJS y Express:
Crear Db.js
Ahora, vamos a crear el archivo db.js dentro de la carpeta config.
Requeriremos y configuraremos la conexión a la base de datos de MySQL. Iniciaremos la conexión, y la exportaremos para que sea accesible desde otros modulos.
Instalar Module Alias
Instalar module alias
Vamos a instalar Module Alias para poder escribir rutas más amigables y así poder importar los modulos más facilmente.
Ejemplo: require('@controllers/document.controller.js');
npm i --save module-alias
Configurar los alias de las rutas
Una vez instalado, vamos a añadir al final del package.json, las rutas de las carpetas donde se encuentran los controladores, modelos, rutas y archivos de configuración.
Requerir module alias en server.js
Por último, para poder utilizar los alias que hemos añadido previamente, vamos a importar la librería module-alias al comienzo del archivo principal, en nuestro caso Server.js.
Modelo, Controlador y Rutas de Documentos
Crear el Modelo de los Documentos
Ahora, vamos a crear el modelo para la tabla de Documentos. En este modelo, crearemos un método para cada una de las consultas, get, post, put, delete...
Estos métodos los ejecutaremos desde el controlador, dependiendo de la ruta que reciba express. Para esto, exportaremos el modelo.
Crear el validador de Documentos
También, vamos a crear un validador de Documentos, para que no se puedan añadir documentos sin título a la base de datos. Este, lo exportaremos para poder utilizarlo en el controlador de documentos.
Crear el Controlador de los Documentos
Ahora es el momento de crear el controlador, este, dependiendo de la ruta de express, ejecutará un método u otro, el cual ejecutará el método correspondiente del modelo, realizando la conexión a la base de datos para, leer, crear, actualizar o eliminar documentos.
Exportaremos el controlador, para poder importarlo en document.routes.js y así poder asignar los métodos del controlador a las rutas.
Crear las Rutas de los Documentos
Para terminar, crearemos el archivo de rutas, para empezar, importaremos el controlador para poder ejecutar los métodos de esté, y crearemos las rutas, asignandole el método del controlador correspondiente.
Exportaremos las rutas para poder importarlas y añadirlas a nodejs en el archivo server.js.
Últimos pasos
Actualizar el server.js
Por último, vamos a actualizar el archivo server.js, importando el archivo de rutas y diciendole a nodejs que las utilice.
Ahora, ya podemos comprobar que todo funciona, para esto podemos utilizar Postman.