¿Cómo integrar TimeORM para gestionar migraciones?
Integrar un sistema de migraciones en tu proyecto es crucial para la gestión eficiente y ordenada de los cambios en tu base de datos. TimeORM, con su CLI, te facilita este proceso de manera automatizada, similar a cómo lo hace NEST para APIs. Aprenderás a configurar y correr migraciones utilizando TimeORM, optimizando así la adaptación de tu base de datos a cambios en tu aplicación. ¡Vamos al código!
¿Cómo configuramos las migraciones?
Para configurar migraciones con TimeORM, es fundamental entender que requiere una conexión y configuración propias, diferentes a las de tu aplicación NEST. Puedes optar por usar un archivo ormconfig.json
o, preferiblemente, integrar variables de ambiente que añadan flexibilidad.
-
Crea el archivo de configuración: Define conexiones, host, usuario, password, tipo de base de datos y puerto. Un ejemplo para una base de datos PostgreSQL:
{
"type": "postgres",
"host": "localhost",
"port": 5432,
"username": "root",
"password": "123456",
"database": "mydb",
"entities": ["dist/**/*.entity{.ts,.js}"],
"migrations": ["dist/migration/*.js"],
"cli": {
"migrationsDir": "src/migration"
}
}
-
Usa variables de entorno: Configura host, usuario, y tablas de migración en un archivo .env
. Ejemplo:
TYPEORM_CONNECTION=postgres
TYPEORM_HOST=localhost
TYPEORM_USERNAME=root
TYPEORM_PASSWORD=123456
TYPEORM_DATABASE=mydb
TYPEORM_MIGRATIONS_DIR=src/migration
-
Entidades y migraciones en TypeScript: Cambia a TypeScript ajustando los paths para buscar archivos .ts
. Utiliza expresiones regulares como dist/**/*.entity{.ts,.js}
para que reconozca las entidades.
¿Cómo ajustar el package.json
para TimeORM?
Modifica el package.json
para incluir scripts que manejen el CLI de TimeORM, facilitando la ejecución de comandos desde tu proyecto.
-
Actualiza los scripts:
-
Añade un script para ejecutar el CLI de TimeORM utilizando ts-node
.
"scripts": {
"typeorm": "ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js",
"migration:generate": "npm run typeorm migration:generate -- -n"
}
-
Ejecuta migraciones:
-
En consola, usa el script para generar una nueva migración nombrada:
npm run migration:generate -- -n InitialMigration
¿Qué problemas comunes podemos encontrar y cómo solucionarlos?
Al integrar sistemas complejos como TimeORM, es común enfrentar errores. Aquí te comparto algunos y cómo resolverlos:
-
Errores de conexión: Verifica que las variables de entorno estén correctamente configuradas sin typos y que el servicio de tu base de datos esté activo.
-
Problemas con TypeScript: Asegúrate de que el CLI de TimeORM reconoce las configuraciones tipeadas. Ajusta el uso de ts-node
para que interprete correctamente decoradores y estructuras modulares.
"scripts": {
"typeorm": "ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js"
}
-
Migraciones no generadas: Si encuentras que no hay cambios detectados, verifica si las tablas fueron creadas manualmente. Si es así, elimínalas y vuelve a generar las migraciones para que el CLI las reconozca.
¿Cómo asegurarnos de que las migraciones corren correctamente?
Finalmente, ejecutar eficazmente las migraciones es vital. Un error común es que no se detecten cambios si las tablas ya existen. Siempre:
- Elimina tablas creadas previamente desde la consola de administración antes de generar nuevas migraciones.
- Revisa los logs tras ejecutar migraciones para confirmar que no hay errores silenciosos.
Implementa las mejores prácticas, como evitar el uso del modo síncrono en producción, y confía en las migraciones para manejar los datos historiales correctamente. Sigue explorando y configurando, y estarás un paso más cerca de una base de datos robusta y bien gestionada. ¡Ánimo, sigue adelante y mejora cada día!
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?