nodo PostgresSQL

Estoy tratando de consultar una base de datos de postgres pero mi consulta no devuelve nada útil. Funciona cuando no uso el parámetro sub, es decir const sql = "SELECT acronym, definition FROM terms WHERE acronym='Thing'", pero no estoy seguro de cómo se debe hacer. Lo intenté de la manera obvia pero no bueno. Creo que podría deberse a que postgres sql "no admite parámetros para identificaciones", lo que sea que eso signifique. ¿Alguien sabe por qué mi consulta no funciona? Muy frustrante muy apreciado.

app.get("/terms", async (req, res) => {
  let values = req.query.term;
  const sql = "SELECT acronym,definition FROM terms WHERE acronym($1)";
  
  const terms = await pgClient.query(sql, values);

  res.send(terms);
  pgClient.end();
});

Al trabajar

{datos: {...}, estado: 200, texto de estado: 'OK', encabezados: {...}, configuración: {...},...}
configuración: {transformRequest: {...}, transformResponse: {...}, tiempo de espera: 0, xsrfCookieName: 'XSRF-TOKEN', adaptador: ƒ, …}
datos: {comando: 'SELECT', rowCount: 46, oid: null, filas: Array(46), campos: Array(2), …}
encabezados: { access-control-allow-origin: '*', conexión: 'keep-alive', content-length:
'10023', content-type: 'application/json; charset=utf-8', fecha: 'Sábado, 15 de enero de 2022 10:41:45 GMT', …}
solicitud: XMLHttpRequest {readyState: 4, timeout: 0, withCredentials: false, upload: XMLHttpRequestUpload, onreadystatechange: ƒ, … }
status: 200
statusText: "OK"
[[Prototipo]]: Objeto...

No funciona

xhr.js:178 POST http://localhost:8080/api/values ​​502 (Puerta de enlace incorrecta)
dispatchXhrRequest @ xhr.js:178
xhrAdapter @ xhr.js:12
dispatchRequest @ dispatchRequest.js:59
Promise.then (async)
request @Axios.js:51
Axios. @ Axios.js:71
wrap @ bind.js:9
... xhr.js:178 OBTENER http://localhost:8080/api/terms/all?term=Word 502 (Puerta de enlace incorrecta)

dispatchDiscreteEvent @ react-dom.development.js:4168
createError.js:16 No detectado (en promesa) Error: la solicitud falló con el código de estado 502
en createError (createError.js:16)
en liquidación (settle.js:18)
en XMLHttpRequest. handleLoad (xhr.js:77)

Answer

Dos comentarios sobre su código:

  • values debe ser una matriz con una entrada por parámetro
  • Los parámetros aparecen en la consulta SQL como $1, $2, ...(o, según la base de datos, como ?) sin ningún cambio en la otra sintaxis. No es necesario volver a citar las cadenas.
let values = [req.query.term]; // an array containing the string
const sql = "SELECT acronym,definition FROM terms WHERE acronym=$1";
const terms = await pgClient.query(sql, values);