Tengo una solicitud de obtención de axios que estoy usando para obtener un elemento para una colección mongodb en un proyecto vue
async created() { try { const res = await axios.get(`http://localhost:3002/backend/gettestbyname`, { name: "user language check numbers in different languages" }) this.items = res.data; this.imagesref = res.data[0].refimages; this.imagestest = res.data[0].testimages; this.imagesresult = res.data[0].testresults; for (let i of this.imagesref){ this.expref.push(false); this.exptest.push(false); this.expres.push(false); } this.loadAPI=true; } catch (error) { console.log(error); }
Y esta es la solicitud de obtención en mi API
gettestbyname:function(req,res){ console.log(req.body.name); scetest.find({name:req.body.name}).exec(function(err,report){ if(err){ res.json({message:'error',status:500,data:null}) } else{ res.json({message:'report in system',status:200,data:report}) } }) }
Cuando pruebo la solicitud en Postman usando el ejemplo de datos json sin procesar: { "nombre": "nombre del elemento"} Obtengo el elemento, pero en mi aplicación obtengo una matriz de datos vacía. estoy agregando el parámetro en la solicitud de axios
EDITAR después de algunas depuraciones, noté que mi solicitud de obtención se ejecuta dos veces en mi aplicación.
La primera ejecución me está dando el resultado correcto y el req.body.name se pasa como un parámetro, la segunda ejecución solo está ejecutando la solicitud de obtención sin parámetro.
Mi aplicación está guardando solo la última solicitud que creo. Esto es lo que obtuve después de que la consola registrara el req.body y el resultado en la solicitud
{ name: 'user language check numbers in different languages' } [ { _id: new ObjectId("624c181587bdfbab1ee80cda"), name: 'user language check numbers in different languages', tag: '@DHRD-52484', status: 'skipped/pending', refimages: [], testimages: [], testresults: [], __v: 0 } ] {} []
Es posible que deba especificar un encabezado content-type
const reponse = await axios({ method: 'GET', headers: { 'Content-Type': 'application/json' }, data: JSON.stringify({ name: 'user language check numbers in different languages' }), url: 'http://localhost:3002/backend/gettestbyname', })
Pero debería funcionar. Además, ¡asegúrese de validar sus entradas! Tal vez lo eliminó por brevedad, pero
console.log(req.body.name); scetest.find({name:req.body.name}).exec(function(err,report){ ... })
El campo de name
debe validarse y no solo aceptarse directamente del cuerpo. Si la persona que llama coloca un objeto allí, podría alterar su consulta de formas inesperadas, definitivamente no lo pase directamente a su función de consulta.