Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

202
Visualizações
node-postgres consulta SELECT parametrizada

Tengo un problema al obtener columnas específicas de la base de datos. Quiero recuperar el saldo de un usuario con el ID de usuario y la moneda proporcionados.

 import dotenv from 'dotenv'; import pkg from 'pg'; dotenv.config(); const {Pool, Client} = pkg const DB_USER = process.env.DB_USER; const DB_HOST = process.env.DB_HOST; const DB_DATABASE = process.env.DB_DATABASE; const DB_PASSWORD = process.env.DB_PASSWORD; const DB_PORT = process.env.DB_PORT; const credentials = { user: DB_USER, host: DB_HOST, database: DB_DATABASE, password: DB_PASSWORD, port: DB_PORT, }; async function getBalance(user_id, currency) { const pool = new Pool(credentials); const res = await pool.query('SELECT $1 FROM wallet WHERE user_id = $2;', [currency, user_id]); console.log(res.rows); await pool.end(); }

Y obtengo >[ { '?column?': 'USD' } ] para la moneda proporcionada = 'USD', en lugar de [ {'USD': 1.2}]. Y cuando no uso el nombre de la columna, obtengo saldos completos para un usuario.

La tabla se parece a esto: user_id | USD | euros | GBP | ... 123123 1,2 2,3 3,4
(Saldos para ese usuario en esa moneda), por lo que para el usuario 123123, su saldo en USD es 1,2, EUR es 2,3 y GBP es 3,4

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

No puede parametrizar un nombre de columna, deberá crear la cadena SQL dinámicamente para eso:

 async function getBalance(user_id, currency) { const client = new Client(credentials); await client.connect(); const query = 'SELECT '+client.escapeIdentifier(currency)+' FROM wallet WHERE user_id = $1;'; const res = await client.query(query, [user_id]); console.log(res.rows); await client.end(); }

También es posible que desee validar los nombres de moneda para que sean columnas existentes (y no 'user_id' ), como

 if (!['USD', 'EUR', 'GBP'].includes(currency)) throw new RangeError('Currency not available');
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda