Coder Social home page Coder Social logo

eimepe / ejemplo-de-api-con-nodejs-express-y-mysql Goto Github PK

View Code? Open in Web Editor NEW

This project forked from viokeoke/ejemplo-de-api-con-nodejs-express-y-mysql

0.0 2.0 0.0 524 KB

Ejemplo de cómo hacer una api con nodejs y express consumiendo datos de una base de datos MySQL

JavaScript 94.50% CSS 1.58% HTML 3.92%

ejemplo-de-api-con-nodejs-express-y-mysql's Introduction

ejemplo-de-api-con-nodejs-express-y-mysql

Ejemplo de cómo hacer una api con nodejs y express consumiendo datos de una base de datos MySQL

Cómo hacer una api con Node.js, express y MySQL

En este tutorial explicaremos cómo hacer una api con Node.JS ayudándonos de la libreria express para hacer consultas a una base de datos MySQL. En este tutorial partiremos de la base de que tenemos instalado Node.JS y configurado correctamente el editor de paquetes npm.

Instalar express

Esta parte puede darnos muchos problemas, yo tuve muchas complicaciones con express por que tras instalarlo no me lo reconocía la terminal de windows, depende de cada ordenador y configuración si os dá muchos problemas podeis dejarme un comentario o googlear un poco a mucha gente le sucede esto, suele deberse a que express no se instala correctamente, en vez de instalarse globalmente se instala en la carpeta en la que estamos ejecuntando la consola de comandos.

Para instalar express sólo tendremos que ejecutar este comando en la terminal

	npm install -g express

Primera app con express

Para crear nuestra primera app con express ejecutaremos el siguiente comando

	express nuestraPrimeraApi

Automáticamente se creará una carpeta con el nombre que hallamos especificado en este caso nos creará la carpeta nuestraPrimeraApi,dentro de ella econtraremos estos archivos.

El archivo app.js es como nuestro "main" de la aplicación, con el configuraremos toda la aplicación, podremos definir las rutas,etc. Express nos creará por defecto una serie de archivos con contenido por defecto el cual obviaremos y borraremos para empezar desde cero para entender el funcionamiento de la api, asi que borraremos los archivos que se encuentran dentro de la carpeta routes y el contenido de app.js. También crearemos una carpeta llamada models que será donde guardemos cada uno de los archivos encargados de conectar con la base de datos y lanzar sentencias SQL.La jerarquía deberá quedar tal que así.

Un poco de código

Comenzaremos añadiendo código al archivo app.js al que previamente hemos borrado todo el contenido generado automáticamente por express y añadiremos esto:


var express = require("express");
var router=express.Router();
var aplicacion = express();

router.get('/', function(request, response) {
response.status(200).json({"mensaje":"Nuestra primera app con node.js utilizando express"}); });

aplicacion.use(router);

aplicacion.listen(5000, function() { console.log("Servidor iniciado"); });

Creo que el código es fácil de entender y que no tiene mucha miga, importamos express al archivo mediante el método require y lo almacenamos en la variable express. Express ya se encarga del direccionamiento de la api y mediante el objeto router podremos crear las diferentes llamadas get,post,put y delete. Para terminar sólo tendremos que indicar a la app que utilize las rutas definidas por router y el puerto en el que debe iniciarse.

Para iniciar nuestra aplicación sólo tendremos que navegar con la terminal hasta el directorio en el que se encuentre la api y ejecutar el siguiente comando

	node app.js

Tras ejecutarlo el servidor estará corriendo en http://localhost:5000/

¿Cómo hacer llamadas a nuestra api?

Para poder consumir nuestra api y probarla podremos usar clientes que nos proporcionen las herramientas necesarias para hacer las diferentes llamadas get,post... Tras probar unos cuantos el que más me ha gustado y con la interfaz más intuitiva es insomnia rest client.

Con este cliente podremos seleccionar las diferentes llamadas para probar nuesto cliente, para probarlo sólo tendremos que hacer una peticion get tal que así

Configurando la base de datos MySQL

Ya hemos aprendido como definir una ruta get sencilla y la respuesta en un json. Ahora nos meteremos con la base de datos, he escogido MySQL para este ejemplo, podeis usar cualquier base de datos tan sólo teneis que buscar el framework e instalarlo mediante npm, para ello con la terminal en la carpeta de nuestra aplicación ejecutaremos:

	npm install mysql

Tras instalar el paquete que gestionará la conexion MySQL y ejecutará las consultas crearemos un archivo nuevo en models que se llamará connection.js en el que definiremos los datos para que la aplicación se pueda conectar a nuestra base de datos.

	var connection={ 
		host: 'host', 
		user: 'root',  
		password: 'root', 
		database: 'ejemplo',
	};

module.exports = connection;

Para este ejemplo he creado una base de datos nueva llamada ejemplo la que contiene una tabla llamada usuarios que contendrá un id de usuario y nombre,algo sencillo.

Creando modelos y definiendo rutas

Crearemos nuestro primer modelo dentro de la carpeta models que se llamará usuarios.js en el que ejecutaremos las sentencias sql y definiremos los métodos para la obtención, creación y modificación de usuarios.

//Importamos los datos de la conexión
var conn=require('./connection');
//Importamos el paquete mysql
var mysql = require('mysql'),
//Creamos la conexión a nuestra base de datos con los datos almacenados en conn
connection = mysql.createConnection(
	conn
);

//Creamos un objeto al que llamaremos usuarios var usuarios = {};

//Obtenemos todos los usuarios usuarios.getUsuarios = function(callback) { if (connection) { connection.query('SELECT * FROM usuarios', function(error, rows) { if(error) { throw error; } else { callback(null, rows); } }); } }

//Obtenemos un usuario por su id usuarios.getUsuarioById = function(id,callback) { if (connection) { var sql = 'SELECT * FROM usuarios WHERE id = ' + connection.escape(id); connection.query(sql, function(error, row) { if(error) { throw error; } else { callback(null, row); } }); } }

//Añadir un nuevo usuario usuarios.insertUsuario = function(usuarioData,callback) { if (connection) { connection.query('INSERT INTO usuarios SET ?', usuarioData, function(error, result) { if(error) {

			throw error;
		}
		else
		{
			//devolvemos el id del usuario insertado
			callback(null, result.insertId);
		}
	});
}

}

//Actualizar un usuario usuarios.updateUsuario = function(datosUsuario, callback) {

if(connection)
{
	var sql = 'UPDATE usuarios SET nombre = ' + connection.escape(datosUsuario.nombre)  +' WHERE id = ' + datosUsuario.id;
	connection.query(sql, function(error, result) 
	{
		if(error)
		{
			throw error;
		}
		else
		{
			callback(null,{"mensaje":"Actualizado"});
		}
	});
}

}

//Eliminar un usuario por su id usuarios.deleteUsuario = function(id, callback) { if(connection) { var sql = 'DELETE FROM usuarios WHERE id = ' + connection.escape(id); connection.query(sql, function(error, result) { if(error) { throw error; } else { callback(null,{"mensaje":"Borrado"}); } }); }

}

module.exports =usuarios;

Ahora procederemos a crear las diferentes rutas para ejecutar los métodos que acabamos de crear, para ello crearemos un nuevo archivo en routes al que llamaremos rutasUsuario.js el cual contendrá lo siguiente:

//Importamos express
var express = require('express');
//Creamos el objeto para definir las rutas
var router = express.Router();
//Importamos el modelo que ejecutará las sentencias SQL
var usuariosModel = require('../models/usuarios');

//Coger todos los usuarios router.get('/usuarios', function(request, response) {
usuariosModel.getUsuarios(function(error, data) { response.status(200).json(data); }); }); //Coger usuario por id router.get('/usuario', function(request, response) {
var id = request.query.id; usuariosModel.getUsuarioById(id,function(error, datos) {

    if (typeof data !== 'undefined' && datos.length > 0)
    {
      response.status(200).json(datos);
    }
    else
    {
      response.status(404).json({"Mensaje":"No existe"});
    }
  });
});

//Insertar usuario /* Ejemplo de uso: en el Body: { "nombre": "Usuario de Prueba" }

*/ router.post('/usuario', function(request, response) { var datosUsuario = { id : null, nombre : request.body.nombre }; usuariosModel.insertUsuario(datosUsuario,function(error, datos) { if(datos) { response.status(200).json({"Mensaje":"Insertado"}); } else { response.status(500).json({"Mensaje":"Error"}); } }); });

//Modificar un usuario router.put('/usuario', function(request, response) {
var datosUsuario = { id:request.query.id, nombre : request.query.nombre };

usuariosModel.updateUsuario(datosUsuario,function(error, datos)
{
  //si el usuario se ha actualizado correctamente mostramos un mensaje
  if(datos && datos.mensaje)
  {
    response.status(200).json(datos);
  }
  else
  {
    response.status(500).json({"mensaje":"Error"});
    
  }
});

}); //Borrar un usuario

router.delete('/usuario', function(request, response) {
var id = request.query.id; usuariosModel.deleteUsuario(id,function(error, datos) { if(datos && datos.mensaje === "Borrado") { response.status(200).json(datos); } else { response.status(500).json({"mensaje":"Error"}); } });

});

module.exports = router;

Podemos ver como cogemos los datos de las diferentes llamadas a la api mediante el request, tenemos varias formas de coger datos para procesarlos, request.body, request.query y request.headers. Para poder coger los datos del body necesitaremos el package body-parser, para ello con la terminal situada en la carpeta de la api ejecutaremos el siguiente comando:

	npm install body-parser

Tras instalarlo deberemos importar el paquete al archivo app.js e incluirlo al uso de la aplicación para ello añadiremos dos lineas en el archivo app.js:


var express = require("express");
var router=express.Router();
var bodyParser  = require("body-parser");
var aplicacion = express();
router.get('/', function(request, response) {  
   response.status(200).json({"mensaje":"Nuestra primera app con node.js utilizando express"});
});

aplicacion.use(bodyParser.json()); //incluimos el archivo en el que se almacenan las rutas de cada entidad aplicacion.use(router);

aplicacion.listen(5000, function() { console.log("Servidor iniciado"); });

Finalizando

Tras hacer todo lo explicado anteriormente sólo quedará agregar las rutas al app.js,rearrancar la aplicación y probarla haciendo llamadas la api, espero que haya sido de ayuda, teneis el proyecto completo en github.


var express = require("express");
var router=express.Router();
var bodyParser  = require("body-parser");
var aplicacion = express();
var usuarios=require("./routes/rutasUsuario");
router.get('/', function(request, response) {  
   response.status(200).json({"mensaje":"Nuestra primera app con node.js utilizando express"});
});
aplicacion.use(bodyParser.json()); 
//incluimos el archivo en el que se almacenan las rutas de cada entidad
aplicacion.use(router);  
aplicacion.use(usuarios);

aplicacion.listen(5000, function() { console.log("Servidor iniciado"); });

ejemplo-de-api-con-nodejs-express-y-mysql's People

Contributors

viokeoke avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.