Estructurando nuestro API

Hace unos días, comencé a crear un API sencillo para comunicar Node.js y una base de datos MYSQL. Lo podéis seguir desde este link (https://www.carlosgonzalezgurrea.es/crear-un-api-con-node-js-y-base-de-datos-mysql/)

La idea era, crear la estructura de la aplicación y conectarla con la base de datos MYSQL.

Hoy vamos a añadir un paso más a la aplicación y es meterle controladores. Poco a poco haremos la aplicación MVC (Modelo-Vista-Controlador). Estos se suele hacer así desde el principio pero en el primer artículo teníamos que entender cómo realizar el paso de crear la aplicación y usar el generador de código que usamos.

Siempre creo o intento crear la misma estructura en mis aplicaciones empiezo con las carpetas:

  • controllers (Guardaremos los ficheros que tienen contendrán la lógica de negocio)
  • models (Guardaremos los modelos de datos de la aplicación)
  • routers (Los ficheros con la configuración de la rutas de la aplicación )

Vamos a trabajar con el controlador de usuarios.

¿Qué es un controlador?

Los controladores son los encargados de contener toda la lógica de negocio de nuestra aplicación, es decir todo lo que se va a realizar en las tripas de nuestra aplicación.

Primero  crear archivo users.js dentro de la carpeta de controllers. Aquí es donde daremos de alta todos los métodos que va a tener nuestro controlador, para poder usarlo desde nuestro fichero de rutas y así tener separado cada elemento del código.

Dentro del archivo user.js vamos a añadir diferentes métodos para que luego puedan ser llamados desde nuestra app.

'use strict'

function loginUser(req, res){

     var username = req.params.username;
     var password = req.params.password;

     res.status(200).send({
     data: username,
     });
}

function getUser(req, res){
     var id = req.params.id;
     res.status(200).send({
     data: id,
     });
}

function getUsers(req, res){
     connection.query('SELECT * from users', function (error, results, fields) {
     if(error){
          res.send(JSON.stringify({"status": 500, "error": error, "response": null}));
          //Hay un error a la hora de conectarse a la BBDD
     } else {
         res.send(JSON.stringify({"status": 200, "error": null, "response": results}));
         //Se envian todos los usuarios
     }
    });
}

function saveUser(req, res){
var params = req.body;
    res.status(200).send({
    user: params
    });
}

function updateUser(req, res){
     var params = req.body;
     res.status(200).send({
     user: params
     });
}

function deleteUser(req, res){
     var id = req.params.id;
     res.status(200).send({
     data: id,
});
}

module.exports = {
     loginUser,
     getUser,
     getUsers,
     saveUser,
     updateUser,
     deleteUser
}

Lo más importante es tener en cuanto que cada método va a realizar unas funciones y hay que exportarla para poder usarla en otros ficheros

module.exports = {

     loginUser,

     getUser,

     getUsers,

     saveUser,

     updateUser,

     deleteUser

}

Ya tenemos el controlador.

Ahora solo tenemos que cambiar nuestro fichero de rutas para poder llamar a los métodos que contiene el fichero anterior. Abrimos nuestro fichero users.js dentro de la carpeta routes. Y añadimos una línea por cada método que vamos a usar.

var express = require('express');

var router = express.Router();

var UserController = require('../controllers/user');

     router.get('/login', UserController.loginUser);

     router.get('/user/:id', UserController.getUser);

     router.get('/users', UserController.getUsers);

     router.post('/user', UserController.saveUser);

     router.put('/user', UserController.updateUser);

     router.delete('/user/:id', UserController.deleteUser);

module.exports = router;

Importante a tener en cuenta, no tenemos seguridad de momento y hay que realizar la llamada al controlar. Lo veis en la 3º línea.

Y por último la diferencia que tenemos que cambiar en nuestro archivo app.js, en el raíz del código, respecto al artículo anterior.

Buscar la línea

     app.use('/api/v1/usuarios', usersRouter);

Y modificarla por

     app.use('/api/v1', usersRouter);

Vamos a ver el resultado para ello, abrimos la consola de comandos y nos vamos a la ruta de la aplicación.

     npm start

Si todo va bien y no da errores, vereis que arranca la aplicación y comenzará a sacar trazas

     [nodemon] restarting due to changes...
     [nodemon] starting `node node ./bin/www`

Nos vamos al navegador y ponemos la ruta de nuestro API. http://localhost:3000/api/v1/users.

Nos sacará un listado de todos los usuarios que tenemos en la aplicación.

Os dejo la entrada en mi Github

Saludos a todos!

Estructurando nuestro API Modificado: junio 28th, 2018 por Carlos González Gurrea
1 estrella2 estrellas3 estrellas4 estrellas5 estrellas (3 votos, promedio: 5,00 de 5)
Cargando...

Centro de preferencias de privacidad

    Almacenamiento y acceso a información

    El almacenamiento de información o el acceso a información ya almacenada en tu dispositivo como identificadores de publicidad, identificadores de dispositivo, cookies y tecnologías similares.

    google.com

    Personalización

    La recopilación y procesado de información sobre tu uso de este servicio para posteriormente personalizar la publicidad y/o el contenido para ti en otros contextos, como otras webs o apps, con el tiempo. Habitualmente el contenido de la web o la app se usa para hacer deducciones sobre lo que te interesa, lo que define la selección futura de publicidad y/o contenido.

    google.com

    Selección de anuncios, entrega, informes

    La recopilación de información y la combinación con información anteriormente recopilada para seleccionar y presentarte publicidad y para medir la entrega y efectividad de esa publicidad. Esto incluye usar información recopilada anteriormente sobre tus intereses para seleccionar anuncios, procesar datos sobre qué anuncios se mostraron, con qué frecuencia se mostraron, cuando y dónde se mostraron y si llevaste a cabo alguna acción relacionada con el anuncio, como por ejemplo hacer clic en un anuncio o hacer una compra. Esto no incluye la personalización, que es la recopilación y procesado de información sobre el uso que haces de este servicio para posteriormente personalizar publicidad y/o otros contenidos para ti en otros contextos, como webs o apps, con el tiempo.

    google.com

    Selecciones de contenido, entrega, informes

    La recopilación de información y combinación con información previamente recopilada para seleccionar y presentarte contenido y para medir la entrega y efectividad de ese contenido. Esto incluye el uso de información recopilada anteriormente sobre tus intereses para seleccionar contenido, procesar datos sobre qué contenido se mostró, con qué frecuencia o durante cuánto tiempo se mostró, dónde y cuándo se mostró y si llevaste a cabo alguna acción relacionada con el contenido, como por ejemplo hacer clic en contenido. Esto no incluye la personalización, que es la recopilación y procesado de información sobre el uso que haces de este servicio para posteriormente personalizar contenido y/o publicidad para ti en otros contextos, como webs o apps, con el tiempo.

    google.com