Como sabemos el SQL ha sido un standard como lenguaje de consultas de base de datos desde los 80, y particularmente MySQL ha destacado como motor de base de datos para web, por su versatilidad. Ahora bien que nuestro Servidor NodeJs pueda realizar consultas a la misma es una de las caractéristicas clave de cualquier aplicación web que se precie. Vamos a descubrir como conectarnos a MySQL y también ejecutar algunas consultas básicas.
Instalando cliente MySQL
Lo primero que debemos realizar es la instalación del cliente MySQL para NodeJs, para ello simplemente desde nuestra ventana de comandos utilizamos el gestor de paquetes:
1 | npm install mysql |
Con nuestro cliente instalado vamos a proceder a definir nuestra conexión en el servidor NodeJs. ( Si no tienes instalado el motor de base de datos MySQL puedes instalarlo bajo Windows aquí o en Linux aquí) .
Creando nuestra conexión
Ahora que ya tenemos instalado el driver de MySQL lo siguiente es añadirlo al Script del servidor y crear nuestra conexión:
1 2 3 4 5 6 7 | var mysql = require('mysql'); var cliente = mysql.createConnection({ host: 'servidorBBDD', user: 'nombre_usuario', password: 'password_usuario', database: 'base_datos' }); |
Conectándonos a la Base de Datos
Con nuestra conexión definida lo primero que podemos realizar es conectarnos a la base de datos para ello hacemos uso del método connect():
1 2 3 4 5 6 7 | client.connect(function(err) { if (err) { console.error('error conectando: ' + err.stack); return; } console.log('conectado con ID ' + client.threadId); }); |
El método connect realiza la conexión a la base de datos de forma explicita y acepta como parámetro una función Callback para gestionar errores o la información de la conexión. En nuestro código anterior si hay algún error, éste vendrá dado por el parámetro que pasemos a la función ( err en nuestro ejemplo) y toda la información en nuestra variable client.
Ejecutando Queries
El método query(), nos permitirá ejecutar sentencias SQL en nuestra base de datos, es muy flexible ya que podemos ejecutarla de 3 formas. La más sencilla es con el pase de 2 parámetros:
1 2 3 | connection.query('Consulta_SQL', function(error, resultados, campos) { //... }); |
La sentencia SQL a ejecutar y una función callback que acepta 3 parámetros: error, resultados y campos. El parámetro error se lanzará si hay un error en la consulta, Los resultados contendrán el resultado de la consulta, como el total de registros afectados y el objeto para iterar en ellos y por último los campos, contendrán información sobre cada campo que devolvemos de la consulta.
La segunda forma, acepta 3 parámetros:
1 2 3 | connection.query('SQL = ?', ['Valor1'], function (error, results, fields) { // .. }); |
Se diferencia de la anterior en que podemos pasar valores por “placeholders”, es decir sustituyendo la interrogación en el SQL (?) por el valor dado en el placeholder, esto es útil cuando deseamos escapar cadenas, de resto el funcionamiento es el mismo.
La última forma es la más avanzada, nos permite definir opciones de ejecución avanzadas, viene de la siguiente forma query ( opciones, callback).
El parámetro opciones es un objeto donde definimos valores como:
- La SQL
- El timeout
- Placeholders
- Joins
- Cast de Tipos.
1 2 3 4 5 6 | connection.query({ sql:'SQL = ?', timeout: 10000, // 10s values: ['Valor1'] }, function (error, results,fields) { }); |
Un Ejemplo práctico
El siguiente ejemplo nos permite conectarnos a una base de datos , realizar una consulta a una tabla e iterar con los resultados obtenidos.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | var mysql = require('mysql'); var client = mysql.createConnection({ host: 'server', user: 'user', password: 'xxxx', database: 'BBDD' }); client.connect(function(err) { if (err) { console.error('error connecting: ' + err.stack); return; } console.log('connected as id ' + client.threadId); }); client.query('SELECT * FROM Tabla' ,function (error, results, fields) { if (error) throw error; console.log('Total de resultados' + results.length); console.log('Total de campos devueltos' + fields.length); for (var i = 0; i < results.length; i++) { console.log('ID: ', results[i].ID); } }); client.end(); |
Te Puede Interesar:
Utilizando NodeJs como cliente de aplicaciones
Haz caché de contenido estático con NodeJs
Gestiona la subida de ficheros con NodeJS