Tutorial

Node.js con MySQL [CRUD completo]

David Zambrano
9/24/2025
30 minutos
21 vistas
MySQL

Cómo conectar Node.js con MySQL y crear un CRUD completo paso a paso

Cuando empecé a trabajar con bases de datos en Node.js, uno de los primeros retos fue aprender a conectar mi aplicación con MySQL y realizar operaciones básicas: crear, leer, actualizar y eliminar datos. A esto se le conoce como CRUD, por sus siglas en inglés: Create, Read, Update, Delete.

En este tutorial te voy a mostrar cómo hacerlo paso a paso, con ejemplos claros y explicaciones sencillas, para que al final tengas una aplicación funcional que podrás adaptar a tus propios proyectos.


¿Qué necesitas antes de empezar?

  1. Node.js instalado en tu sistema.
    Puedes verificarlo con:
    node -v
    
  2. MySQL instalado y corriendo en tu máquina o VPS.
    Para comprobarlo:
    mysql -u root -p
    
  3. Un editor de texto (recomiendo VSCode).
  4. Conocimientos básicos de JavaScript.

Paso 1: Crear el proyecto de Node.js

Primero, vamos a crear una carpeta para el proyecto y a inicializar npm:

mkdir node-mysql-crud
cd node-mysql-crud
npm init -y

Esto creará un archivo package.json que contendrá la configuración del proyecto.


Paso 2: Instalar dependencias necesarias

Instalaremos Express para crear el servidor y mysql2 para conectarnos a la base de datos:

npm install express mysql2

Opcionalmente, instalamos nodemon para reiniciar el servidor automáticamente cuando hagamos cambios:

npm install -D nodemon

Paso 3: Crear la base de datos y tabla en MySQL

Conéctate a MySQL y ejecuta lo siguiente:

CREATE DATABASE blogdb;

USE blogdb;

CREATE TABLE posts (
  id INT AUTO_INCREMENT PRIMARY KEY,
  titulo VARCHAR(100) NOT NULL,
  contenido TEXT,
  creado TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Con esto tenemos lista la tabla posts para guardar artículos.


Paso 4: Conectar Node.js a MySQL

Crea un archivo db.js:

const mysql = require('mysql2');

// Configuración de la conexión
const connection = mysql.createConnection({
  host: 'localhost',
  user: 'root',
  password: 'tu_contraseña',
  database: 'blogdb'
});

// Conectar a MySQL
connection.connect((err) => {
  if (err) {
    console.error('Error conectando a MySQL:', err);
    return;
  }
  console.log('Conectado a MySQL');
});

module.exports = connection;

Paso 5: Crear el servidor Express

Archivo index.js:

const express = require('express');
const app = express();
const PORT = 3000;
const db = require('./db');

// Middleware
app.use(express.json());

// Rutas básicas
app.get('/', (req, res) => {
  res.send('API CRUD con Node.js y MySQL funcionando 🚀');
});

app.listen(PORT, () => {
  console.log(`Servidor corriendo en http://localhost:${PORT}`);
});

Ejecuta el servidor:

node index.js

Paso 6: Implementar operaciones CRUD

Ahora crearemos las rutas para gestionar los posts.

Crear (POST)

app.post('/posts', (req, res) => {
  const { titulo, contenido } = req.body;
  const sql = 'INSERT INTO posts (titulo, contenido) VALUES (?, ?)';
  db.query(sql, [titulo, contenido], (err, result) => {
    if (err) throw err;
    res.json({ id: result.insertId, titulo, contenido });
  });
});

Leer (GET)

// Todos los posts
app.get('/posts', (req, res) => {
  db.query('SELECT * FROM posts', (err, results) => {
    if (err) throw err;
    res.json(results);
  });
});

// Post por id
app.get('/posts/:id', (req, res) => {
  const { id } = req.params;
  db.query('SELECT * FROM posts WHERE id = ?', [id], (err, result) => {
    if (err) throw err;
    res.json(result[0]);
  });
});

Actualizar (PUT)

app.put('/posts/:id', (req, res) => {
  const { id } = req.params;
  const { titulo, contenido } = req.body;
  const sql = 'UPDATE posts SET titulo = ?, contenido = ? WHERE id = ?';
  db.query(sql, [titulo, contenido, id], (err) => {
    if (err) throw err;
    res.json({ mensaje: 'Post actualizado correctamente' });
  });
});

Eliminar (DELETE)

app.delete('/posts/:id', (req, res) => {
  const { id } = req.params;
  const sql = 'DELETE FROM posts WHERE id = ?';
  db.query(sql, [id], (err) => {
    if (err) throw err;
    res.json({ mensaje: 'Post eliminado correctamente' });
  });
});

Paso 7: Probar la API

Puedes usar Postman, Insomnia o curl para probar los endpoints.

Ejemplo de crear un post:

curl -X POST http://localhost:3000/posts -H "Content-Type: application/json" -d '{"titulo":"Mi primer post", "contenido":"Contenido del post"}'

Paso 8: Mejoras recomendadas

Lo que hicimos es una API básica. Para producción, te recomiendo:

  • Usar dotenv para guardar las credenciales de la BD.
  • Manejar errores con middleware de Express.
  • Agregar validaciones de datos.
  • Implementar paginación en el listado de posts.
  • Conectar un frontend (React, Angular, Vue) para mostrar los datos.

Conclusión

Conectar Node.js y MySQL es más sencillo de lo que parece. Con Express y mysql2, en pocas líneas de código puedes crear una API CRUD completa y lista para usarse en proyectos reales.

Este tutorial te servirá como base para construir aplicaciones más avanzadas, desde blogs hasta sistemas de gestión y paneles de administración.