Podemos crear consultas complejas con Mongoose con opciones como $lte , $gt , $ne , etc., pero me pregunto dónde/cómo deberíamos crear esas consultas.
Si tengo un formulario en mi interfaz que permite ingresar un rango de fechas, podría enviar un cuerpo de solicitud que se vea así:
{ date: { $gt: "01/01/2021", $lte: "31/01/2021" } }Pero, ¿es esta una buena práctica? Si no es así, ¿en qué formato debo enviar esto y cómo puedo transformarlo en una consulta Mongoose?
asumiendo que está enviando eso en el cuerpo de la solicitud, entonces no es así como se supone que debe hacerlo, esto puede exponer una falla de seguridad en el sentido de que sus atacantes pueden escribir consultas ellos mismos y recuperar información confidencial al ver que su backend ejecutará CUALQUIER consulta esto se puede utilizar potencialmente para exponer información confidencial.
La base de datos es algo que se supone que maneja el backend, no el frontend, no haga que el frontend escriba las consultas. En su lugar, simplemente envíe un mensaje como este:
{ "startDate": "1/1/1", "endDate": "2/2/2" }Luego, en su backend, puede obtener los valores del cuerpo de la solicitud y hacerlo usted mismo.
{ date: { $gt: startDate, $lte: endDate } }He pensado en este también. Actualmente tenemos algunas rutas en nuestra API que aceptan una consulta personalizada en el req.body como su ejemplo, sin embargo, son solo rutas de "búsqueda" y están protegidas por nuestro middleware de autenticación. Esto facilitó la búsqueda de documentos por varias propiedades en el front-end VS construyendo una ruta para cada parámetro.
No estoy seguro de si esta es la mejor práctica, pero si no tenemos fe en nuestro sistema de autenticación, las personas pueden leer todos nuestros datos de todos modos, por lo que no estoy seguro de cómo permitirles enviar una consulta personalizada podría empeorar las cosas.