Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

333
Vistas
¿Es mejor tener funciones de consulta separadas o una dinámica?

Estoy trabajando en el backend de una aplicación web que usa node-postgres y tengo curiosidad por saber qué piensan los demás. Necesito consultas de inserción básicas para una tabla de usuarios, una tabla de productos y otras tablas por venir. No quiero código redundante, pero tampoco quiero aflojar la legibilidad. ¿Sería mejor tener varias funciones de consulta similares:

NOTA: createValueString() solo crea una cadena de parámetros ($1, $2, $3)

 async function createUser(user) { const client = await pool.connect(); const userKeys = Object.keys(user).join(","); const userValues = Object.values(user); try { const { rows } = await client.query( ` INSERT INTO users(${userKeys}) VALUES (${createValueString(user)}) RETURNING *; `, userValues ); console.log(`USER CREATED`, rows); return rows; } catch (error) { throw error; } finally { client.release(); } } async function createProduct(product) { const client = await pool.connect(); const productKeys = Object.keys(product).join(","); const productValues = Object.values(product); try { const { rows } = await client.query( ` INSERT INTO products(${productKeys}) VALUES (${createValueString(product)}) RETURNING *; `, productValues ); console.log(`PRODUCT CREATED`, rows); return rows; } catch (error) { throw error; } finally { client.release(); } }

O sería mejor crear una función dinámica:

 async function insertQuery(tableName, item){ const client = await pool.connect(); const itemKeys = Object.keys(item).join(","); const itemValues = Object.values(item); try { const { rows } = await client.query( ` INSERT INTO ${tableName}(${itemKeys}) VALUES (${createValueString(itemValues)}) RETURNING *; `, itemValues ); console.log(`ITEM CREATED`, rows); return rows; } catch (error) { throw error; } finally { client.release(); } }
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Potencialmente podrías tener ambos. En general, desea que el código sea bastante claro sobre qué código hace qué, así que insertQuery(); no grita exactamente esto crea un usuario. Donde como, createUser(); obviamente lo hace.

Lo que puede tener es una función como executeQuery(sql, params); como tu segunda idea con funciones dinámicas. Como resultado, no tenga código redundante/repetitivo.

Simplemente pase la cadena SQL y los parámetros. Esto funciona y tiene más sentido con los procedimientos almacenados, que es lo que te recomiendo que hagas.

 const executeQuery = (sql, params) => { // sql = "Call stored_procedure_name(parameter list)"; // params = [name, age, etc] // Perform query code .. // pool being a configured database connection object. pool.query(sql, params); }

Luego, tenga las distintas funciones que necesita reutilice esto.

 const createUsers = () => { const sql = "Call createUserProcedure(params)"; const params = [name, age, etc]; const res = executeQuery(sql, params); }

Versión mysql:

 const sql = "CALL CreateUser(?,?);"; const params = [name,age,etc]; const res = await executeQuery(sql, params);
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda