|     Inicio    |   |         |  |   FOROS      |  |      |      
   Elastix - VoIP B4A (Basic4Android) App inventor 2 PHP - MySQL
  Estación meteorológica B4J (Basic4Java) ADB Shell - Android Arduino
  Raspberry Pi Visual Basic Script (VBS) FireBase (BD autoactualizable) NodeMCU como Arduino
  AutoIt (Programación) Visual Basic Cosas de Windows Webs interesantes
Translate:
Búsqueda en este sitio:


.

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.

_______________________________

- Mi correo:
juana1991@yahoo.com
- KIO4.COM - Política de cookies. Textos e imágenes propiedad del autor:
© Juan A. Villalpando
No se permite la copia de información ni imágenes.
Usamos cookies propias y de terceros que entre otras cosas recogen datos sobre sus hábitos de navegación y realizan análisis de uso de nuestro sitio.
Si continúa navegando consideramos que acepta su uso. Acepto    Más información