Requerimientos
Antes de empezar con el tutorial debes contar con lo siguiente
- Nodejs Instalado
- Mariadb Instalado
- Docker Instalado
MariaDB Container
docker run -p 3306:3306 -d --name mariadb -e MYSQL_ROOT_PASSWORD=mypassword mariadb/server:10.4
o si en tu caso, ya tienes una instalación de mysql u mariadb localmente, probablmente tengas un conficto de los puertos. Así que simplemente puedes cambiar el puerto del contenedor a otro numbero, por ejemplo el numero 3307
docker run -p 3307:3306 -d --name mariadb -e MYSQL_ROOT_PASSWORD=mypassword mariadb/server:10.4
Hecho esto puedes ejecutar el comando docker ps
para ver el estado del contenedor de Docker.
Usando tu cliente de mariadb instado localmente puedes conectarte al contenedor usando el siguiente comando:
mysql --host 127.0.0.1 -P 3307 --user root -p
una vez conectado podras crear una base de datos
CREATE DATABASE mydatabase;
Una vez creada podemos usar esta base de datos con el comando USE
USE mydatabase
Y para comprobar si realmente estamos usando la base de datos, podemos ejecutar:
SELECT DATABASE() FROM DUAL;
Creemos una table llamada products, con una sola columna llamada name que sera un varchar(100)
CREATE TABLE mydatabase.products(name VARCHAR(100));
Para ver nuestra tabla podemos usar describe
DESCRIBE mydatabase.products;
Ahora insertemos algunos datos
INSERT INTO products VALUES ('laptop'), ('mouse'), ('keyboard');
A partir de aquí ya podemos crear nuestro proyecto de Nodejs.
Conexión desde Nodejs
empecemos creando una carpeta:
mkdir mariadb-project && cd mariadb-project
npm init -y
npm i express mariadb
luego crearemos dos archivos. un archivo llamado index.js y el otro database.js nuestro archivo database.js
const mariadb = require("mariadb");
const pool = mariadb.createPool({
host: "127.0.0.1",
port: '3307',
user: "root",
password: "mypassword",
database: "mydatabase",
});
async function getConnection() {
try {
const connection = await pool.getConnection();
return connection;
} catch (error) {
console.log(error);
}
}
module.exports = {getConnection};
y en el archivo index.js
const express = require('express')
const app = express();
const pool = require('./database')
app.get('/products', async (req, res) => {
try {
// Get conneciton
const conn = await pool.getConnection();
// create a new query
var query = "select * from products";
// execute the query
var rows = await conn.query(query);
// Respond the products
res.status(200).json(rows);
} catch (error) {
throw error; // or pass using next. next(error)
}
});
app.post('/new-product', async (req, res) => {
console.log(req.body);
// Get connection
const conn = await pool.getConnection();
// create a new query
const query = 'INSERT INTO products VALUE (?)';
// executing the query
const result = await conn.query(query, [req.body.name]);
// respond to the client
res.status(200).json(result);
})
app.listen(3000, () => console.log(`Server on port 3000`));
Finalmente visitemos nuestro http://localhost:3000/products, y veremos nuestros datos que vienen desde mariadb en un contenedor de Docker.