mbcj-sequelize
v1.1.4
Published
[](https://opensource.org/licenses/ISC)
Readme
mbcj-sequelize
Descripción del Proyecto
mbcj-sequelize es una librería para Node.js diseñada para simplificar y agilizar la configuración, conexión y gestión de relaciones en proyectos que utilizan Sequelize como ORM. Esta utilidad centraliza la lógica de conexión a la base de datos (PostgreSQL), la sincronización de modelos y la creación de asociaciones, permitiendo a los desarrolladores enfocarse en la lógica de negocio en lugar de en la configuración repetitiva.
El público objetivo son desarrolladores de Node.js que buscan una manera más limpia y modular de integrar Sequelize en sus aplicaciones.
Características
- Conexión Simplificada: Crea una instancia de Sequelize y establece la conexión con la base de datos a través de una única función (
crearConexion), utilizando un objeto de configuración o variables de entorno. - Inicialización Flexible: Autentica y sincroniza los modelos con la base de datos mediante un método (
iniciarDB) que soporta diferentes estrategias comosync(por defecto),alteroforce. - Gestor de Relaciones Declarativo: Incluye una función (
relacionar) que abstrae la complejidad de definir asociacionesuno-uno,muchos-unoymuchos-muchosentre modelos de una manera más legible. - Modularidad: Promueve una estructura de base de datos limpia y organizada, siendo fácilmente integrable en cualquier proyecto Node.js.
Estructura del Proyecto
La librería se compone de los siguientes archivos principales:
index.js: Punto de entrada que exporta las utilidadescrearConexion,iniciarDByrelacionarpara un fácil acceso.conexion.js: Contiene la lógica para crear la instancia de Sequelize (crearConexion) y para sincronizar la base de datos (iniciarDB).relacionar.js: Exporta la funciónrelacionar, diseñada para establecer asociaciones entre los modelos de Sequelize.example/: Un directorio con un proyecto de ejemplo funcional que demuestra cómo utilizar la librería en una aplicación Express.
Tecnologías y Dependencias
Dependencias de producción:
- Sequelize: ORM para Node.js.
- pg: Cliente de PostgreSQL para Node.js.
- pg-hstore: Serializador/deserializador para el tipo de dato HSTORE de PostgreSQL.
Dependencias de desarrollo (para el ejemplo):
- Express: Framework web para Node.js.
- Dotenv: Para cargar variables de entorno desde un archivo
.env. - Nodemon: Herramienta que reinicia automáticamente la aplicación cuando detecta cambios.
Instalación
Añade la librería a tu proyecto:
npm install mbcj-sequelizeConfigura las Variables de Entorno: Crea un archivo
.enven la raíz de tu proyecto para configurar las credenciales de la base de datos.DB="nombre_de_la_db" DBUSER="usuario_db" DBPASS="contraseña_db" DBHOST="localhost" DBPORT="5432"
Uso
A continuación, se muestra un ejemplo de cómo utilizar mbcj-sequelize para configurar la base de datos, definir modelos y establecer relaciones en una aplicación Express.
1. Inicialización de la Base de Datos
Crea un archivo para gestionar la configuración de la base de datos (ej. db/main.js).
// db/main.js
const { crearConexion, relacionar } = require('mbcj-sequelize');
// Asegúrate de haber cargado las variables de entorno previamente (ej. con dotenv)
const { DB: db, DBUSER: user, DBPASS: pass, DBHOST: host, DBPORT: port } = process.env;
// 1. Crea la instancia de Sequelize
const sequelize = crearConexion({ db, user, pass, host, port });
// 2. Define tus modelos pasándoles la instancia de sequelize
const Localidad = require('./modelos/Localidad')(sequelize);
const Provincia = require('./modelos/Provincia')(sequelize);
// 3. Establece las relaciones entre los modelos
// Una provincia tiene muchas localidades (relación muchos a uno)
relacionar('muchos-uno', Localidad, Provincia, 'provincia', 'localidades', 'provincia_id');
// 4. Exporta la instancia para usarla en tu aplicación
module.exports = { sequelize };2. Definición de Modelos
Crea tus modelos de Sequelize en archivos separados. Cada modelo debe exportar una función que recibe sequelize y devuelve el modelo definido.
Modelo Provincia.js:
// modelos/Provincia.js
const { DataTypes } = require('sequelize');
function definir(sequelize) {
const Provincia = sequelize.define('provincia', {
nombre: {
type: DataTypes.STRING,
defaultValue: 'Desconocido'
}
}, {
tableName: 'provincias',
paranoid: true // Habilita borrado lógico (soft delete)
});
return Provincia;
}
module.exports = definir;Modelo Localidad.js:
// modelos/Localidad.js
const { DataTypes } = require('sequelize');
function definir(sequelize) {
const Localidad = sequelize.define('localidad', {
nombre: {
type: DataTypes.STRING,
defaultValue: 'Desconocido'
}
// Sequelize añadirá automáticamente 'provincia_id' debido a la relación
}, {
tableName: 'localidades',
paranoid: true
});
return Localidad;
}
module.exports = definir;3. Integración en la Aplicación Principal
En el punto de entrada de tu aplicación (ej. app.js), importa la configuración de la base de datos e inicia la conexión.
// app.js
const express = require('express');
const path = require('path');
// Carga las variables de entorno
require('dotenv').config({ path: path.join(__dirname, '.env') });
// Importa la instancia de sequelize y la inicializa
const { sequelize } = require('./db/main');
sequelize.iniciarDB('sync') // Puedes usar 'alter' o 'force' en desarrollo
.then(tipo => console.log(`Base de datos conectada y sincronizada (${tipo}).`))
.catch(err => console.error('Error al iniciar la base de datos:', err));
const app = express();
const PORT = process.env.PORT || 3000;
app.get('/', (req, res) => {
res.send('App con db conectada correctamente');
});
app.listen(PORT, () => {
console.log(`Servidor escuchando en el puerto ${PORT}`);
});Licencia
Este proyecto está bajo la Licencia ISC. Consulta el archivo LICENSE para más detalles.
Contacto
Si tienes alguna pregunta o sugerencia, no dudes en abrir un "issue" en el repositorio.
- Nombre del Autor: Damian Greco
