- Publicado en
Para crear un CRUD (Crear, Leer, Actualizar y Eliminar) de usuarios utilizando Node.js con Express como backend y MariaDB como base de datos, siguiendo tu configuración con Apache2 y un dominio virtual hay que seguir estos pasos:
Configuración inicial
Primero, asegurarse de tener instalados Node.js, npm y MariaDB en el sistema. Luego, crea un nuevo proyecto e instalar las dependencias necesarias:
mkdir crud-usuarios
cd crud-usuarios
npm init -y
npm install express mysql2 body-parser
Estructura del proyecto
Crear la siguiente estructura de archivos:
crud-usuarios/
├── app.js
├── config/
│ └────── db.js
└── routes/
└────── users.js
Configuración de la base de datos
En el archivo config/db.js, configura la conexión a MariaDB:
[ config/db.js ]
const mysql = require('mysql2');
const connection = mysql.createConnection({
host: 'localhost',
user: 'tu_usuario',
password: 'tu_contraseña',
database: 'tu_base_de_datos'
});
connection.connect(error => {
if (error) throw error;
console.log('Conexión exitosa a la base de datos.');
});
module.exports = connection;
Configuración del servidor Express
En el archivo app.js, configura el servidor Express:
[ app.js ]
const express = require('express');
const bodyParser = require('body-parser');
const usersRoutes = require('./routes/users');
const app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use('/api/users', usersRoutes);
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Servidor corriendo en el puerto ${PORT}`);
});
Implementación de las rutas CRUD
En el archivo routes/users.js, implementa las rutas para el CRUD:
[ routes/users.js ]
const express = require('express');
const router = express.Router();
const db = require('../config/db');
// Crear un usuario
router.post('/', (req, res) => {
const { user, username } = req.body;
const query = 'INSERT INTO users (user, username) VALUES (?, ?)';
db.query(query, [user, username], (error, results) => {
if (error) {
return res.status(500).json({ error: error.message });
}
res.status(201).json({ id: results.insertId, user, username });
});
});
// Obtener todos los usuarios
router.get('/', (req, res) => {
const query = 'SELECT * FROM users';
db.query(query, (error, results) => {
if (error) {
return res.status(500).json({ error: error.message });
}
res.json(results);
});
});
// Obtener un usuario por ID
router.get('/:id', (req, res) => {
const query = 'SELECT * FROM users WHERE id = ?';
db.query(query, [req.params.id], (error, results) => {
if (error) {
return res.status(500).json({ error: error.message });
}
if (results.length === 0) {
return res.status(404).json({ message: 'Usuario no encontrado' });
}
res.json(results[0]);
});
});
// Actualizar un usuario
router.put('/:id', (req, res) => {
const { user, username } = req.body;
const query = 'UPDATE users SET user = ?, username = ? WHERE id = ?';
db.query(query, [user, username, req.params.id], (error, results) => {
if (error) {
return res.status(500).json({ error: error.message });
}
if (results.affectedRows === 0) {
return res.status(404).json({ message: 'Usuario no encontrado' });
}
res.json({ id: req.params.id, user, username });
});
});
// Eliminar un usuario
router.delete('/:id', (req, res) => {
const query = 'DELETE FROM users WHERE id = ?';
db.query(query, [req.params.id], (error, results) => {
if (error) {
return res.status(500).json({ error: error.message });
}
if (results.affectedRows === 0) {
return res.status(404).json({ message: 'Usuario no encontrado' });
}
res.json({ message: 'Usuario eliminado correctamente' });
});
});
module.exports = router;
Configuración de Apache2 como proxy inverso
Para que Apache2 funcione como proxy inverso para la aplicación Node.js, se necesita configurar un virtual host. Editar el archivo de configuración del dominio virtual:
sudo nvim /etc/apache2/sites-available/subdomain.dominio.net.conf
Añadir la siguiente configuración:
<VirtualHost *:80>
ServerName subdomain.dominio.net
ProxyPreserveHost On
ProxyPass / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/
ErrorLog ${APACHE_LOG_DIR}/subdomain.dominio.net-error.log
CustomLog ${APACHE_LOG_DIR}/subdomain.dominio.net-access.log combined
</VirtualHost>
Habilitar el módulo proxy de Apache2 y reiniciar el servicio:
sudo a2enmod proxy proxy_http
sudo systemctl restart apache2
Uso del CRUD
Ahora puedes usar el CRUD a través de tu dominio virtual:
- Crear un usuario: POST http://subdomain.dominio.net/api/users
- Obtener todos los usuarios: GET http://subdomain.dominio.net/api/users
- Obtener un usuario por ID: GET http://subdomain.dominio.net/api/users/:id
- Actualizar un usuario: PUT http://subdomain.dominio.net/api/users/:id
- Eliminar un usuario: DELETE http://subdomain.dominio.net/api/users/:id
Iniciar la aplicación Node.js con:
node app.js
Este CRUD te permitirá gestionar los usuarios en tu base de datos MariaDB a través de una API RESTful, accesible desde tu dominio virtual http://subdomain.dominio.tinux.net