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
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 MySQLusermanagement_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:.env
: Asegúrese de que la variableDB_NAME
en el archivo.env
coincida con el nombre de la base de datos que creó o que ya existe.Asegurarse de que las credenciales sean correctas: Verificar que las variables
DB_USER
yDB_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.Modificar el método
mysql.createConnection()
: En lugar de utilizarmysql.createConnection()
, utilicemysql.createPool()
. Aquí hay un ejemplo: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.
Modificar
server.js
: Actualice eluserController.js
para importar el pool de conexiones de esta manera:Nota: la ubicación del archivo que exporta el método
mysql.createPool()
(en este casodb.js
) puede variar según la estructura de su proyecto.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 objetoconnection
. Aquí hay un ejemplo: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: