Comenzar con un ORM facilita la estructura y gestión de las bases de datos, dado que permite configurar las mismas de manera abstracta. Esta característica, sin embargo, puede causar errores de validación como duplicidades en campos únicos, lo que generalmente resulta en errores 500. Aprender a manejar estos errores de manera eficiente mejora la usabilidad y comprensión de nuestra aplicación.
En este contexto, se crea un middleware llamado ORMErrorHandler que permite filtrar y ajustar los errores que provienen del ORM, en este caso, SQLite. De forma particular, el middleware captura los errores de tipo ValidationError, que suelen estar relacionados con restricciones como las de unicidad de un campo. En estos casos, se puede configurar el middleware para que responda con un código de error 409 y brinde detalles claros sobre el problema, ayudando así a identificar rápidamente la causa del error y solucionarlo.
// Ejemplo de código de middleware para manejar errores de ORMfunctionORMErrorHandler(err, req, res, next){if(err instanceofValidationError){return res.status(409).json({type: err.name,message: err.message,});}next(err);}
¿Cómo configurar y usar Docker para MySQL?
Docker se presenta como una solución ideal para probar diversos motores de bases de datos, como MySQL y MariaDB, sin necesidad de instalarlos directamente en tu máquina. Esto ahorra tiempo y evita la complejidad asociada con la configuración de drivers o conflictos de versiones.
Para ejecutar una imagen de MySQL en Docker, es necesario configurar el archivo docker-compose.yml con las variables de entorno adecuadas, lo que incluye especificar la versión de MySQL, el usuario, la contraseña root, y los puertos de conexión, además de persistir los datos con un volumen adecuado.
Después de configurar el docker-compose.yml, simplemente con el comando docker compose up podrás tener tu entorno listo para realizar pruebas y experimentar con MySQL.
¿Qué ventajas ofrece phpMyAdmin?
phpMyAdmin es una herramienta visual que facilita la gestión de bases de datos MySQL sin la necesidad de instalación de software adicional en tu equipo, gracias a Docker. Puedes configurar phpMyAdmin como un contenedor independiente que se comunica con el contenedor de MySQL a través del puerto correspondiente.
services:phpmyadmin:image: phpmyadmin
environment:PMA_HOST: mysql # nombre del servicio MySQL en docker-composeports:-"8080:80"
Esta herramienta permite ejecutar consultas SQL, gestionar datos de las tablas, realizar back-ups, todo desde un entorno gráfico, lo que simplifica enormemente la administración de bases de datos como MySQL. Accederás a phpMyAdmin a través de un navegador web, simplificando tareas administrativas y de mantenimiento.
¿Cómo cambiar la conexión a MySQL sin afectar el código?
Uno de los aspectos más destacados del uso de un ORM es la capacidad de cambiar de un motor de base de datos a otro sin modificar la lógica de la aplicación. Este cambio se logra mediante la actualización de las configuraciones en el .env y modificaciones en el código de conexión.
Al cambiar de PostgreSQL a MySQL, solo necesitas ajustar el nombre del usuario, la contraseña y el nombre del motor en la cadena de conexión de tu ORM.
# .env file
DB_USER=root
DB_PASSWORD=password123
DB_PORT=3306
# En el archivo de configuración ORM
sequelize = new Sequelize('database', process.env.DB_USER, process.env.DB_PASSWORD, {
host: 'localhost',
dialect: 'mysql',
});
Aunque el cambio de motor es sencillo, cada motor puede tener sus propias reglas y características, por lo que es importante estar atento a los detalles al realizar la migración.
Mantente motivado y sigue explorando las distintas posibilidades que te ofrecen las herramientas de desarrollo modernas. Aprender a manejar bases de datos con herramientas como Docker y ORMs incrementa la flexibilidad y productividad de tus desarrollos.
Increíble la ventaja que da trabajar en Docker, me haré el curso de Docker para profundizar en el tema.
x2 no podia conectarme a PostgreSQL sin Docker
Yo me cambié de Windows a Ubuntu para empezar a usar Docker jajaja
Si a alguno le da error solo tiene que cambiar el puerto en mysql así esto conecta el puerto 33061 de nuestro sistema operativo con el puerto 3306 del contenedor.
Me super super super salvaste! Mil gracias! :)
Muchas gracias.
Para aquellos que les tira error y el docker no es recordar que sequelize necesita las librería
npm i --save mysql2
Saludos
Gracias hermano!
agrego , despues tuve que hacer
npm uninstall sequelize npm i --save sequelize
para que reconociera el cambio .
Este curso ha sido muy frustrante para mi. El Docker y Sequealize me han dado muchos problemas, no entiendo porqué.
me pasa lo mismo
Mateo buenos días, no se si es muy tarde pero si tienes los errores que te están saliendo déjalos en el chat a ver si podemos ayudarte.
SI a alguien le da algun error al intentar conectarse al contendor de mysql, les dejo la configuración con la que me sirvio, muy similar a la de la clase, con un ligero cambio (:
muy buen aporte bro me funciono con tu ayuda dejan en vacio el (MYSQL_USER=).
Gracias
gracias Tambien me funciono con tu aporte m
Cuando vayan a ejecutar el servidor si les da error, en la variable de entorno deben colocar el puerto 33061 para que ejecute, ya que el contenedor de docker levanta mysql con el puerto 3306 y externamente el server se levanta con el puerto 33061 como esta en la imagen anterior.
Muchas gracias Alba ¡Me funcionó! :)
Docker for MySQL 🐬
.
✨Definición de variables de entorno.
# mysql and docker
MYSQLDATABASE=thingst
MYSQLUSER=tester
MYSQLPASSWORD=14db7d47-f442-4a90-b633-2a537c8b5c13
♻️ Adición de DB como servicio en Docker:
services:mysql:image: mysql
restart: always
ports:-3306:3306environment:MYSQL_DATABASE: ${MYSQLDATABASE}MYSQL_ROOT_PASSWORD: ${MYSQLPASSWORD}MYSQL_USER: ${MYSQLUSER}MYSQL_PASSWORD: ${MYSQLPASSWORD}volumes:-./db/mysql:/var/lib/mysql
Donde:
MYSQL_DATABASE. Define la base de datos con la que se trabajará.
MYSQL_ROOT_PASSWORD. Se define la contraseña del usuario root.
MYSQL_USER . Se define un usuario root con ámbito definida por MYSQL_DATABASE
MYSQL_PASSWORD. Se define la contraseña para el usuario MYSQL_USER.
.
🔥 Finalmente, levantamos los servicios:
docker compose --env-file src/config/.env up -d
--env-file se cargan las variables de entorno definidas.
-d se levantan las instancia en modo silencioso
.
ℹ️ Para conectarse mediante clientes, el host permitido es mediante default del contenedor 0.0.0.0:3306
Buenas!
Si les aparece en el estado de la máquina de MySQL como “Exit 1”, lo que deben hacer es eliminar, del archivo docker-compose.yml, la siguiente variable:
MYSQL_USER=root
De esta forma iniciará el sistema. (En versiones anteriores permitía agregar esa variable, ahora se toma por defecto como root si no existe).
si, y al hacer docker compose logs [container] , se puede ver el error de contenedor, en este caso mysql.
amigo, gracias por tu comentario, me sirvió demasiado
Para andar evitando re escribir que motor de Base de datos corremos, es mejor añadir que motor es en .env y añadirlo dentro de config.js
Al momento de querer levantar mysql su estado se quedaba en Exit 1.
Para arreglar ese problema dentro de docker-compose.yml en el apartado de volumes lo cambié.
Antes:
./mysql_data:/var/lib/mysql
Después:
"~/mysql_data:/var/lib/mysql"
Ahora al momento de subirlo a docker si está en Up.
Gracias, esto fue lo único que me funciono luego de estar cambiando puertos, etc.
Gracias. Me solucionó el problema de conexión en Ubuntu.
Si tiene una MacBook M1 y te muestra el siguiente mensaje al levantar el contener con MySQL:
ERROR: no matching manifest for linux/arm64/v8 in the manifest list entries
Agrega esta línea en el archivo docker-compose.yml:
Mil gracias!!! Me salvaste! Me quedé atorado ahí un buen rato jajaja
Comando
Descripcion
docker-compose up -d mysql
Cambiando de DDBB
docker-compose ps
Verificar si ya esta corriendo
docker-compose up -d phpmyadmin
Levantando phpmyadmin
npm install --save mysql2
Driver para mysql
npm run dev
Correr la base de datos
Me aparecia el estado del servicio de mysql en Exit 1
solo deje el usuario vacio y me funciono
Tambien tenia probemas para levantar el contenedor de mysql hice esta maniobra y me funciono. Gracias
Nico te explica hasta el ; GENIO!!!!
que bien que se tomo la molestia de dar otro ejemplo con mysql
Tengo un error de ECONNREFUSED ¿alguien sabe que podría hacer?
Es la conexión, fijate el archivo de sequelize.js
Tampoco he logrado solucionarlo :/
Compañeros no olvidar crear la base de datos 'my_store' en el gestor de bd phpMyAdmin
Hola compañero, a mí se me creo automaticamente la base de datos y la tabla al ejecutar el servidor de node con NPM.
Al usar sequelize, la crea automaticamente, fijate que en las consultas sql que muestra en consola dice: CREATE TABLE IF NOT EXISTS
Yo tengo instalado MySQL Workbench en mi pc, por lo que me da un error al levantar el servicio de "mysql".
Sin embargo, hice un pequeño cambio en el puerto para que funcione.
al puerto que escucha el servicio lo cambie de 3306 al 3307. Espero les sirva.
Tengan cuidado con los tipos de datos decimales, en postgres funcional el NUMBER(escala,no.Decimal), pero en MYSQL no funciona. Se recomienda usar el tipo NUMERIC()
Intente de todo, pero fue imposible realizar esta clase. Perdí mas de 3 horas tratando de solucionar los mil errores que me arrojaba, pero nada. Regreso con postgres.
hola muchachos para los que el handler no les funcionó o no les mostraba en la respuesta la sección de "errors" averigüé un poco y posiblemente se ha actualizado la manera en que se puede tener acceso a ese detalle.