Crear un API con Node.js y Base de datos MYSQL

Hola a todos
Hoy quiero hacer una pequeña introducción a la creación de un API Restful con Node.js y MYSQL.

La verdad es que para que todo funcione, debemos tener instalado en nuestro equipo un servidor de MYSQL (Yo uso XAMPP cuando trabajo sobre Windows, en Linux lo configuro todo a mano) y Node.js que ya os explique cómo instalarlo, en este artículo.

Para que veáis lo fácil que puede ser crear un API sencillo, lo vamos a hacer con un generador, ya lo haremos a mano otro día.

Bastaría con 3 comandos:

npm install express-generator -g

Una vez instalado, nos vamos a la ruta por la consola de comandos y lanzamos sobre el directorio raíz sobre el que va a colgar el API.

express --view=pug node-api

Una vez realizado, yo suelo añadir varias líneas al fichero package.json en el directorio creado.

{
"name": "node-api",
"version": "1.0.0",
"description": "Node Api Restful",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "nodemon node ./bin/www"
},
"author": "Carlos González",
"license": "ISC",
"dependencies": {
"cookie-parser": "~1.4.3",
"debug": "~2.6.9",
"http-errors": "~1.6.2",
"morgan": "~1.9.0",
"pug": "2.0.0-beta11",
"bcrypt-nodejs": "0.0.3",
"body-parser": "^1.18.3",
"connect-multiparty": "^2.1.0",
"express": "^4.16.3",
"jwt-simple": "^0.5.1",
"moment": "^2.17.1",
"mysql": "^2.15.0"
},
"devDependencies": {
"nodemon": "^1.11.0"
}
}

Ahora entrar en la ruta de la aplicación y lanzar

npm install

Una vez realizado todos estos pasos, ya tendremos casi lista el API para mostrar usuarios.

Crearemos una base de datos en nuestro MYSQL, por ejemplo node-api y crearemos una tabla de usuarios. Por ejemplo:

CREATE TABLE `users` (
`id` int(11) NOT NULL,
`usuario` varchar(255) NOT NULL,
`password` varchar(255) NOT NULL,
`nombre` varchar(255) NOT NULL,
`apellidos` varchar(255) NOT NULL,
`email` varchar(255) NOT NULL,
`telefono` varchar(15) NOT NULL,
`fecha_alta` date NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Hecho esto, nos vamos al fichero app.js y configuramos la conexión a la BBDD, por otro lado las cabeceras y el bodyparser de la aplicación. Hay que añadir

var mysql = require("mysql");
var bodyParser = require('body-parser');

//Database connection
app.use(function(req, res, next){
global.connection = mysql.createConnection({
host : 'localhost',
user : usuario,
password : password,
database : 'node-api'
});
connection.connect();
next();
});

app.use(bodyParser.urlencoded({extended:false}));
app.use(bodyParser.json());

// configurar cabeceras http
app.use((req, res, next) => {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Headers', 'Authorization, X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Allow-Request-Method');
res.header('Allow', 'GET, POST, OPTIONS, PUT, DELETE');
res.header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, DELETE');
next();
});

Y modificamos las rutas para que funcione nuestro Api.

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

Una vez realizados todos estos pasos, os vais a la carpeta routes y abrís el fichero users.js. Aquí realizaremos la Select y la devolución de los datos, si todo ha ido bien mandaremos un JSON y un código 200, sino un error. Para ello modificaremos el método GET del archivo por este:

/* GET listar usuarios. */
router.get('/', function(req, res, next) {
      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
           }
      });
});

Ahora si os vais al navegador y ejecutáis http://localhost:3000/api/v1/usuarios podréis ver el resultado, un JSON con todos vuestros usuarios.

De momento no he metido seguridad, aunque iré ampliando artículos para ir añadiendo seguridad con jwt.

Os he dejado el código fuente en mi github, podéis bajarlo y ejecutar un npm install en la carpeta ya que no está subida la carpeta de módulos.

Saludos a todos

Crear un API con Node.js y Base de datos MYSQL Modificado: junio 28th, 2018 por Carlos González Gurrea
1 estrella2 estrellas3 estrellas4 estrellas5 estrellas (7 votos, promedio: 3,86 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