Automatización de Base de Datos con Node.js
Este ejemplo muestra cómo automatizar la creación de una base de datos MySQL utilizando mysql2/promise. La función ejecutará el código SQL para crear la base de datos, las tablas y los datos iniciales.
Función Principal: initializeDatabase
const mysql = require("mysql2/promise");
const initializeDatabase = async (config, schemaSQL, seedSQL) => {
let connection;
try {
connection = await mysql.createConnection({
host: config.host,
user: config.user,
password: config.password,
});
console.log(`Conectado al servidor MySQL en ${config.host}`);
// Crear la base de datos si no existe
await connection.query(\`CREATE DATABASE IF NOT EXISTS \${config.database};\`);
console.log(\`Base de datos '\${config.database}' creada o ya existe.\`);
// Usar la base de datos creada
await connection.query(\`USE \${config.database};\`);
console.log(\`Usando la base de datos '\${config.database}'.\`);
// Ejecutar el script para crear tablas
if (schemaSQL) {
await connection.query(schemaSQL);
console.log("Tablas creadas correctamente.");
}
// Insertar datos iniciales si es necesario
if (seedSQL) {
await connection.query(seedSQL);
console.log("Datos iniciales insertados correctamente.");
}
} catch (error) {
console.error("Error durante la inicialización de la base de datos:", error.message);
} finally {
if (connection) {
await connection.end();
console.log("Conexión cerrada.");
}
}
};
module.exports = { initializeDatabase };
Cómo Usar la Función
1. Configuración
const config = {
host: "localhost",
user: "root",
password: "password",
database: "my_database",
};
2. Archivos SQL
Archivo de esquema (schema.sql):
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Archivo de datos iniciales (seed.sql):
INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com'), ('Bob', 'bob@example.com');
3. Ejecutar la Configuración
Utiliza el siguiente archivo para inicializar:
const fs = require("fs");
const path = require("path");
const { initializeDatabase } = require("./initializeDatabase");
const schemaSQL = fs.readFileSync(path.join(__dirname, "schema.sql"), "utf8");
const seedSQL = fs.readFileSync(path.join(__dirname, "seed.sql"), "utf8");
(async () => {
await initializeDatabase(config, schemaSQL, seedSQL);
})();
Resultados Esperados
Al ejecutar la configuración, deberías ver:
- Base de datos creada si no existía.
- Tablas creadas a partir del esquema proporcionado.
- Datos iniciales insertados si se proporciona un archivo
seed.sql.
