[API REST - NODEJS] manejo de query params

Muy buenas, vereis, me ha tocado diseñar una aplicación con este esquema(muchos estareis hartos de verlo seguramente)

interfaz para manejar datos(la que quiera)
api con los metodos para hacer el crud de la BBDD
base de datos.

Bien, tengo la base de datos probada, tengo las queries que hacen lo que se pide.
Los metodos POST, PUT y DELETE funcionan con json sin problemas.

El problema me viene por concepto en los metodos GET.

De entrada decir que no soy desarrollador y no era mi intencion serlo [+risas] pero soy el chico de los recados y nunca viene mal adquirir nuevos conocimientos, por lo que en apenas una semana he apredido lo suficiente de javascript para poder hacer que lo explicado funcione. Sin embargo me he topado con un error de concepto por mi parte, ya que conseguia que el GET hiciera todo lo que yo quería pero claro usando un json(y funciona, me devuelve lo que le pido). El problema viene cuando me entero que el concepto para el GET no es ese, investigando un poco he llegado a las siguientes cuestiones:

- Manteniendo el asunto sencillo, con un endpoint /api/tabla la api me devuelve todos los datos de la tabla como si un "SELECT * FROM tabla;" fuera
- con el endpoint /api/tabla/:id consigo que me devuelva los datos concretos pertenecientes a esa id( WHERE id = $1). Esto si no estoy equivocado se le denomina path param.
- y aqui viene mi problema. con un get igual ademas necesitaria lo siquiente(perdonad mi pseudocodigo):
select * from tabla where id = $1
and fecha between (fecha1=valor AND fecha2=valor);
si no me equivoco, los valores de fecha1 y fecha2 los puedo conseguir de la url de una forma tal que asi /api/tabla?fecha1=valor&fecha2=valor
y esto se llamaría query params, sin embargo no consigo dar con la tecla y no consigo llegar a un punto donde ponerme a investigar como deberia ir. mas adelante vendran mas problemas xD, pero eso para otro dia.

Mirando me perida con searchParams, con fetch...

Alguien me puede dar algo de claridad? me imagino que una vez saque los datos de la url bastará con pasarlos a variables y simplemente usar algo del estilo:
let valor1 = ...
let valor2=...
`select * from tabla where id = $1
and fecha between (fecha1=${valor1} AND fecha2 = ${valor2});`

Pero no se como pedirle que saque esos datos de la url para pode aplicar filtros bien.
En node tienes el módulo nativo 'url' que tiene algunas utilidades para manejar esto. Con esto puedes sacar los query params de manera bastante sencilla.

// Incluyes el módulo
const url = require('url');

// la url
let sentUrl = https://localhost:8080/5?nombre=pepe&apellido=perez&edad=25;

// sacamos los queryparams * solucionado nombre de variable
let queryParams = url.parse(sentUrl).query;

// hacemos un console.log a uno de los parámetros
console.log(queryParams['nombre']); // nos devuelve 'pepe'


Por cierto, todos los que vean esto te van a decir que no crees la query de esa manera, metiendo las variables a pelo. Es una manera perfecta de que te hagan un SQL Injection y puedan hacer con la base de datos lo que quieran. El módulo que usas para conectarte a la base de datos probablemente tenga alguna manera de formatear las queries para evitar este problema. Con el módulo mySql, por ejemplo, la crearías así (si no estoy equivocado):

let queryToSend = mysql.format('SELECT * FROM TABLA WHERE ID = ? AND FECHA BETWEEN FECHA1=? AND FECHA2 =?', [id, queryParams['fecha1'], queryParams['fecha2'] ]);


Un saludo
Perfecto, voy a empezar a probar.
Por cierto, gracias por el aviso, el uso de queries lo hago mediante node-pg, es similar al que mencionas pero para postgres, me revisaré la documentación para no incidir en ese error y, aunque es una aplicación a nivel interno, siempre viene bien este tipo de avisos.

Muchas gracias!
2 respuestas