es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error: base de datos desconocida al usar mysql2

Me encontré con algunos problemas con MySQL al ejecutar > npm start, lo cual indicaba que necesitaba actualizarlo. Después de buscar en la web y encontrar una recomendación para usar “mysql2”, me encontré con un nuevo problema que hizo que nodemon se bloqueara. A continuación se muestran los errores devueltos:

  code: 'ER_BAD_DB_ERROR',
  errno: 1049,
  sqlState: '42000',
  sqlMessage: "Base de datos desconocida 'usermanagement_tut'",
  sql: undefined

Detalles del proyecto

"dependencies": {
  "body-parser": "^1.19.0",
  "dotenv": "^8.2.0",
  "express": "^4.17.1",
  "express-handlebars": "^5.2.0",
  "mysql2": "^2.3.3"
 },
 "devDependencies": {
   "nodemon": "^2.0.7"
 }

Utilizo una máquina con Windows y tengo instalada la versión 8 de MySQL

Actualizado: estructura de archivos

server/controllers/userController.js

     const mysql = require('mysql2');

// Pool de conexiones
let connection = mysql.createConnection({
  host: process.env.DB_HOST,
  user: process.env.DB_USER,
  password: process.env.DB_PASS,
  database: process.env.DB_NAME,
  port: process.env.DB_ROOT
});

.env

DB_HOST = localhost
DB_NAME = usermanagement_tut
DB_USER = root
DB_PASS = rootpass
DB_ROOT = 3306

ufc-fighters-data.sql

user-schema.sql

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución para el cierre inesperado de nodemon al usar mysql2

    El mensaje de error ER_BAD_DB_ERROR sugiere que la base de datos de MySQL usermanagement_tut no se puede encontrar. Este error probablemente ocurre porque no existe una base de datos con ese nombre. Aquí están los pasos para resolver este problema:

    1. Verificar que la base de datos exista: Utilice un cliente de MySQL como Workbench o la línea de comandos para verificar si la base de datos existe. Si no existe, créela. Puede crear una base de datos utilizando el siguiente comando:
      CREATE DATABASE usermanagement_tut;
      
    2. Verificar el archivo .env: Asegúrese de que la variable DB_NAME en el archivo .env coincida con el nombre de la base de datos que creó o que ya existe.
    3. Asegurarse de que las credenciales sean correctas: Verificar que las variables DB_USER y DB_PASS en el archivo .env coincidan con el nombre de usuario y la contraseña de una cuenta que tenga acceso a la base de datos.

    4. Modificar el método mysql.createConnection(): En lugar de utilizar mysql.createConnection(), utilice mysql.createPool(). Aquí hay un ejemplo:

      const mysql = require('mysql2');
      
      // Pool de conexiones
      const pool = mysql.createPool({
         host: process.env.DB_HOST,
         user: process.env.DB_USER,
         password: process.env.DB_PASS,
         database: process.env.DB_NAME,
         port: process.env.DB_ROOT,
         waitForConnections: true,
         connectionLimit: 10,
         queueLimit: 0
      });
      
      module.exports = pool;
      

      Este código crea un pool de conexiones en lugar de una sola conexión. Los pools de conexiones son más adecuados para aplicaciones que requieren acceso frecuente a la base de datos, ya que pueden manejar múltiples consultas simultáneamente.

    5. Modificar server.js: Actualice el userController.js para importar el pool de conexiones de esta manera:

      const pool = require('./server/models/db');
      

      Nota: la ubicación del archivo que exporta el método mysql.createPool() (en este caso db.js) puede variar según la estructura de su proyecto.

    6. Por último, actualice sus consultas en consecuencia: Modifique las consultas en el archivo userController.js para usar el nuevo objeto de pool en lugar del objeto connection. Aquí hay un ejemplo:

      pool.query('SELECT * FROM users', (error, results, fields) => {
         // manejar el error o los resultados aquí
      });
      

    Una vez completados los pasos anteriores, ejecute npm start nuevamente y verifique que se haya resuelto el problema del cierre inesperado de nodemon.

    Nota: Aquí está la estructura de archivos que se debe considerar:

    Carpeta_del_proyecto
    |
    |---node_modules
    |
    |---server
    |    |
    |    |--- controllers
    |    |       |---userController.js
    |    |
    |    |--- models
    |    |       |---db.js
    |    |
    |    |--- public
    |    |
    |    |--- views
    |    |
    |    |--- app.js
    |    |
    |    |--- package.json (dependencias y devDependencies)
    |    |
    |    |--- .env
    |    |
    |    |--- archivos *.sql
    |
    |--- package.json
    |
    |--- .gitignore
    |
    |--- README.md
    

Comments are closed.