En este momento, cada vez que quiero ejecutar una consulta mysql en mis funciones api, creo una conexión DB, luego ejecuto la consulta y libero la conexión para cada función api. El código se vuelve más complicado cuando se debe ejecutar una consulta de base de datos anidada e incluso pensé en problemas de rendimiento ya que las conexiones se crean y liberan continuamente. Esta es mi implementación actual
servidordb.js
const db = mysql.createPool({ connectionLimit: 100, host: DB_HOST, user: DB_USER, password: DB_PASSWORD, database: DB_DATABASE, port: DB_PORT }) module.exports = dbapp.js (archivo principal)
const express = require("express") const app = express() app.use(express.json()) const db = require('./dbServer') require('./Backend/Routes/ApifileName')(app , db); const port = process.env.PORT app.listen(port)ApiFileName.js
const mysql = require("mysql") const auth = require("../Middlewares/VerifyMerchantAuth") module.exports = function(app , db){ app.post("/v1/route" ,auth, async(req , res) => { let someParam= req.body.someParam; let sql_command = "SELECT * from table_Name where column_name = ?" let sql_query = mysql.format(sql_command,[someParam]) db.getConnection ( async (err, connection)=> { if (err) throw err; await connection.query (sql_query, async (err, result) => { connection.release(); if (err) throw err; if(result.length == 0){ return res.json({error : "some error"}) } return res.json({result : "some result"}); }) }) }) }Jerarquía de mis archivos
node_modules package.json app.js dbServer.js Backend -> 1. Routes -> ApiFileName.js 2. Middlewares -> Here I want to write this sql functionMi requisito ahora es que necesito escribir una función común que tome db y sql_query como parámetros y debería devolver una respuesta en caso de éxito o error.
Lo probé yo mismo, pero la respuesta de mysql llega después de que la API devuelve su respuesta. Intenté usar await , .then() pero nada funcionó.
¿O este método implementado actualmente ya es eficiente? Da tus puntos de vista.
Por favor ayúdenme y gracias de antemano
Una nueva conexión para cada consulta SQL es terrible para el rendimiento. Tener una única conexión para toda la invocación de la aplicación. Eso puede implicar tener un lugar "global" o "estático" para sostener el "mango" de la conexión.
Si está en un entorno web, no puede mantener la conexión de una "página web" a la siguiente. Simplemente suéltelo y vuelva a conectarse en la página siguiente.
No te preocupes por las "piscinas"; compraron suficiente rendimiento para preocuparse.
Hay un caso raro en el que necesita más de una "conexión" en una aplicación, si está hablando con diferentes servidores . Dentro de un solo servidor, una conexión puede interactuar con todas las bases de datos y tablas (que tiene permiso para tocar).