es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

React: Valor nulo de Axios en el cuerpo de la solicitud POST

Soy un traductor español que traduce documentos de IT. Traduzca lo siguiente al español. No traduzca el código y la salida en markdown.

Soy nuevo en el uso de axios y tengo un problema con una solicitud de publicación. Paso una matriz al cuerpo de la solicitud al backend, pero está nula cuando se ejecuta la consulta.

Estos son mis componentes: (La solicitud está en “getDriversFromARace Function”)

const getRaceResults = async() => {
await axios.post(`http://localhost:5000/api/race-results/${raceId}`)
.then(res => res.data)
.then(res => setRaceResults(res));
}
useLayoutEffect(() => {
getRaceResults();
}, []);

console.log(driversFromRace);

return(
<>

)

const DriversForm = ({raceResults}) => {
const [driversFromRace,setDriversFromRace] = useState([]);
const driversId = raceResults.map(driver => driver.driverId)

const getDriversFromARace = async() => {
await axios.post(“http://localhost:5000/api/driver-from-race”,{
driverId:driversId
})
.then(res => res.data)
.then(res => setDriversFromRace(res));
}
useEffect(() => {
getDriversFromARace();
},[]);

return (
<>

Choose a Driver



)

El controlador del backend:

const Driver = require(‘../models’).drivers;
const Sequelize = require(‘sequelize’);

module.exports = {

getDriversFromARace(req,res){
return Driver
.findAll({
attributes:{exclude:[‘createdAt’,’updatedAt’]},
where:{
driverId:{
[Sequelize.Op.in]:req.body.driverId
}
}
})
.then(driver => {
res.status(200).json(driver);
})
.catch(error => {
res.status(500).send({message:error.message});
})
}
}

El componente se renderiza cuando hago clic en el botón “Link”:

¿Por qué la consulta se está ejecutando con un cuerpo nulo?

Gracias de antemano.

EDICIÓN

Puse un console.log con la variable “driversId” y las IDs están allí, pero se imprime 3 veces antes de imprimir las IDs.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema parece estar en la forma en que se está pasando la matriz driversId al backend. Se está enviando una matriz en el cuerpo de la solicitud con el nombre de propiedad ‘driverId’, pero en el controlador del backend se está buscando la matriz bajo ‘req.body.driverId’.

    Sugiero cambiar el cuerpo de la solicitud axios.post por algo como:

    await axios.post("http://localhost:5000/api/driver-from-race", driversId)
    .then(res => res.data)
    .then(res => setDriversFromRace(res));
    

    De esta manera, la matriz se pasará directamente en el cuerpo de la solicitud, sin ningún nombre de propiedad. Su controlador backend debería funcionar bien como está.

    Además, el console.log(driversFromRace) en el componente RaceResultsForm no es necesario y podría causar problemas de rendimiento, especialmente con conjuntos de datos grandes. Puede eliminarlo ya que no parece proporcionar ningún valor significativo.

Comments are closed.