Tutorial del Internet de las Cosas y Bluetooth con el ESP32
Juan Antonio Villalpando
Volver al índice del tutorial
____________________________
117.- Node.js y MySQL (MariaDB).
- En el tutorial 117_Wemos_NodeJs.htm vimos como instalar de forma "Portable" Node.js en el ordenador para crear un Servidor Web. Es muy conveniente ver ese tutorial antes de comenzar este.
- En el tutorial 340C_appinventor_mysqli.htm vimos como gestionar una base de datos MySQL con App Inventor.
- Ahora vamos a instalar el gestor de Base de Datos MariaDB (es prácticamente igual a MySQL) y gestionarla con Node.js desde App Inventor.
- Vamos a: https://mariadb.org/download/ y bajamos el archivo instalable .msi, en mi caso mariadb-10.4.20-winx64.msi (58 MB), bajo esta versión porque la voy a instalar en Windows 7 y las versiones actuales solo se instalan en Windows 10.
- Tenemos instalado MariaDB, se encuentra en C:\Program Files\MariaDB 10.4\data.
- Se ejecutará como Servicio.
- HeidiSQL es como phpMyAdmin, para gestionar la base de datos, podemos crear bases de datos, tablas, campos, modificar, borrar, ver datos...
_________________________________________________________________
- Instalación del driver mysql en Node.js
- Volvemos a Node.js
- Instalamos el driver mysql en node
npm install mysql
___________________________________________________________
- Para gestionar la Base de Datos MySql (MariaDB) vamos a seguir este tutorial:
https://www.w3schools.com/nodejs/nodejs_mysql.asp
___________________________________________________________
1.- Crear base de datos. CREATE BASE.
create_db.js |
var mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost",
user: "root",
password: "1234",
});
con.connect(function(err) {
if (err) throw err;
console.log("Connected!");
con.query("CREATE DATABASE mydb", function (err, result) {
if (err) throw err;
console.log("Database created");
});
});
|
2.- Crear tabla. CREATE TABLE.
create_table.js |
var mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost",
user: "root",
password: "1234",
database: "mydb" // Data Base name.
});
con.connect(function(err) {
if (err) throw err;
console.log("Connected!");
var sql = "CREATE TABLE customers (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), address VARCHAR(255))";
con.query(sql, function (err, result) {
if (err) throw err;
console.log("Table created");
});
});
|
- En HeidiSQL podemos ver la base de datos mydb y la tabla customers que hemos creado.
- Si quisiéramos cambiar algo de la estructura de la tabla utilizaríamos ALTER
var sql = " ALTER TABLE customers ADD COLUMN id INT AUTO_INCREMENT PRIMARY KEY " ;
3.- Insertar datos. INSERT.
insert_db.js |
var mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost",
user: "root",
password: "1234",
database: "mydb" // Data Base name.
});
con.connect(function(err) {
if (err) throw err;
console.log("Connected!");
var sql = "INSERT INTO customers (name, address) VALUES ('Company Inc', 'Highway 37')";
con.query(sql, function (err, result) {
if (err) throw err;
console.log("1 record inserted");
});
});
|
- Vamos a HeidiSQL y observamos el datos insertado.
4.- Archivo de conexión independiente.
- En vez de poner los elementos de conexión en el mismo archivo que la orden mysql, vamos a poner los datos de conexión en otro archivo y luego requerirlo en el archivo de la orden.
connect_db.js |
var mysql = require('mysql');
config = {
host: "localhost",
user: "root",
password: "1234",
database: "mydb"
}
var connection =mysql.createConnection(config);
connection.connect(function(err){
if (err){
console.log('Error connecting:' + err.stack);
}
console.log('Connected successfully to DB.');
});
module.exports ={
connection : mysql.createConnection(config)
}
|
insert_db_con.js |
var config = require('./connect_db.js');
var con = config.connection;
con.connect(function(err) {
if (err) throw err;
console.log("Connected!");
var sql = "INSERT INTO customers (name, address) VALUES ?";
var values = [
['Peter', 'Lowstreet 4'],
['Amy', 'Apple st 652'],
['Hannah', 'Mountain 21'],
['Michael', 'Valley 345'],
['Sandy', 'Ocean blvd 2'],
['Betty', 'Green Grass 1'],
['Richard', 'Sky st 331'],
['Susan', 'One way 98'],
['Vicky', 'Yellow Garden 2'],
['Ben', 'Park Lane 38'],
['William', 'Central st 954'],
['Chuck', 'Main Road 989'],
['Viola', 'Sideway 1633']
];
con.query(sql, [values], function (err, result) {
if (err) throw err;
console.log("Number of records inserted: " + result.affectedRows);
});
});
|
5.- Seleccionar las columnas name y address. SELECT.
select_db.js |
var config = require('./connect_db.js');
var con = config.connection;
con.connect(function(err) {
if (err) throw err;
con.query("SELECT name, address FROM customers", function (err, result, fields) {
if (err) throw err;
console.log(result);
});
});
|
- Observa la función devuelve err, result y fields.
- Si añadimos
console.log(result[2].address);
obtenemos:
Apple st 652
6.- Seleccionar con filtro. WHERE.
where_db.js |
var config = require('./connect_db.js');
var con = config.connection;
con.connect(function(err) {
if (err) throw err;
con.query("SELECT * FROM customers WHERE address = 'Park Lane 38'", function (err, result) {
if (err) throw err;
console.log(result);
});
});
|
where_db2.js |
var config = require('./connect_db.js');
var con = config.connection;
con.connect(function(err) {
if (err) throw err;
con.query("SELECT * FROM customers WHERE address LIKE 'S%'", function (err, result) {
if (err) throw err;
console.log(result);
});
});
|
where_db3.js |
var config = require('./connect_db.js');
var con = config.connection;
var name = 'Amy';
var adr = 'Mountain 21';
var sql = 'SELECT * FROM customers WHERE name = ? OR address = ?';
con.query(sql, [name, adr], function (err, result) {
if (err) throw err;
console.log(result);
});
|
- Escape se utiliza para evitar la inject SQL, esto es una forma de entrar en base de datos poco protegidas.
where_escape_db.js |
var config = require('./connect_db.js');
var con = config.connection;
var adr = 'Mountain 21';
var sql = 'SELECT * FROM customers WHERE address = ' + mysql.escape(adr);
con.query(sql, function (err, result) {
if (err) throw err;
console.log(result);
});
|
7.- Ordenar. ORDER.
order_db.js |
var config = require('./connect_db.js');
var con = config.connection;
con.connect(function(err) {
if (err) throw err;
con.query("SELECT * FROM customers ORDER BY name", function (err, result) {
if (err) throw err;
console.log(result);
});
});
|
8.- Borrar. DELETE.
delete_db.js |
con.connect(function(err) {
if (err) throw err;
var sql = "DELETE FROM customers WHERE address = 'Mountain 21'";
con.query(sql, function (err, result) {
if (err) throw err;
console.log("Number of records deleted: " + result.affectedRows);
});
});
|
9.- Actualizar. UPDATE.
update_db.js |
var config = require('./connect_db.js');
var con = config.connection;
con.connect(function(err) {
if (err) throw err;
var sql = "UPDATE customers SET address = 'Canyon 123' WHERE address = 'Valley 345'";
con.query(sql, function (err, result) {
if (err) throw err;
console.log(result.affectedRows + " record(s) updated");
});
});
|
________________________________________________________
10.- App Inventor. MySQL. Node.js
p340B_mysql_node_get.aia
- Pondremos los códigos correspondientes a la conexión, Insertar, Borrar, Actualizar, Ver, Seleccionar en un solo archivo, en el archivo de la creación del servidor.
- Este será el nuevo archivo que creará el Servidor Web y con el que podremos gestionar la Base de datos.
- CUIDADO con la 'comilla simple' y con las "comillas dobles", a veces '"están juntas"'.
server.js |
// Juan A. Villalpando
// http://kio4.com/arduino/117_Wemos_NodeJs_MySQL.htm
//-------------------------------------------------------------------------------------
var url = require('url');
var http = require('http');
var querystring = require('querystring');
var mysql = require('mysql');
//-------------------------------------------------------------------------------------
function requestHandler(request, response) {
var uriData = url.parse(request.url);
var pathname = uriData.pathname;
var query = uriData.query;
var queryData = querystring.parse(query);
var con = mysql.createConnection({
host: "localhost",
user: "root",
password: "1234",
database: "mydb" // Data Base name.
});
//--- INSERT ------------------------------------------------------------------------------
if (pathname == '/insertar') {
var name = queryData.name;
var address = queryData.address;
con.connect(function(err) {
if (err) throw err;
console.log("Connected!");
var sql = "INSERT INTO customers (name, address) VALUES ('"+name+"','"+address+"')";
con.query(sql, function (err, result) {
if (err) throw err;
console.log(name);
response.end("Datos agregados a la base.");
});
con.end();
});
//--- DELETE ------------------------------------------------------------------------------
} else if (pathname == '/borrar') {
var name = queryData.name;
con.connect(function(err) {
if (err) throw err;
var sql = "DELETE FROM customers WHERE name ='"+name+"'";
con.query(sql, function (err, result) {
if (err) throw err;
console.log("Number of records deleted: " + result.affectedRows);
response.end("Datos borrados.");
});
con.end();
});
//--- UPDATE ------------------------------------------------------------------------------
} else if (pathname == '/actualizar') {
var name = queryData.name;
var address = queryData.address;
con.connect(function(err) {
if (err) throw err;
var sql = "UPDATE customers SET address = '"+address+"' WHERE name ='"+name+"'";
con.query(sql, function (err, result) {
if (err) throw err;
console.log("Number of records updated: " + result.affectedRows);
response.end("Datos modificados.");
});
con.end();
});
//---- SELECT WHERE -----------------------------------------------------------------------
} else if (pathname == '/buscar') {
var name = queryData.name;
var address = queryData.address;
con.connect(function(err) {
if (err) throw err;
con.query("SELECT * FROM customers WHERE name = '"+name+"'", function (err, result) {
if (err) throw err;
console.log(result);
response.end(JSON.stringify(result));
});
con.end();
});
//--- SELECT ------------------------------------------------------------------------------
} else if (pathname == '/ver') {
var name = queryData.name;
var address = queryData.address;
con.connect(function(err) {
if (err) throw err;
con.query("SELECT * FROM customers ", function (err, result) {
if (err) throw err;
console.log(result);
response.end(JSON.stringify(result));
});
con.end();
});
//---------------------------------------------------------------------------------
} else {
response.end("Wrong order.");
}
//---------------------------------------------------------------------------------
}
var server = http.createServer(requestHandler);
server.listen(8000);
console.log('Server listening on port 8000');
|
_______________________________________________
- Diseño.
_______________________________________________
- Bloques.
_______________________________
|