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.

No se puede analizar la matriz del cuerpo de la solicitud HTTP en Node.

Estoy tratando de consumir un cuerpo POST codificado application/x-www-form-urlencoded en mi ruta de node.js.

Solicitud usando curl en la línea de comando:

curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d 'trx[0][trx_amt]=4166481.208338&trx[0][trx_crdr]=CR&trx[0][trx_tran_type]=TR&trx[0][trx_ref1]=5979NY270557&trx[1][trx_amt]=-5735967.281740&trx[1][trx_crdr]=DR&trx[1][trx_tran_type]=II&trx[1][trx_ref1]=7305XN175748' localhost:8080/api/test

Ahora quiero analizar esos valores y colocarlos en un array de arrays (sin pares clave / valor). Analizar los valores del cuerpo de la solicitud funciona bien, colocarlos en un array también (current_trx), pero empujar ese array como un elemento dentro de otro array (trx_data) deja el array en blanco. Por favor ayúdame a entender cuál es el problema.

app.post("/api/test", (req, res) => {

console.log(JSON.stringify(req.headers));
  console.log(req.body);

var trx_data = [];
  var current_trx = [];

for (let i = 0; i < req.body.trx.length; i++) {
    current_trx.push(parseFloat(req.body.trx[i].trx_amt));
    current_trx.push(req.body.trx[i].trx_crdr);
    current_trx.push(req.body.trx[i].trx_tran_type);
    current_trx.push(req.body.trx[i].trx_ref1);

trx_data.push(current_trx); // esto parece no tener ningún efecto, trx_data permanece vacío

console.log("CURRENT_TRX:");
console.log(current_trx);  // esto funciona bien, salida esperada

// vaciando current_trx para el siguiente bucle
while (current_trx.length > 0) {
  current_trx.pop();
}
}

console.log("TRX_DATA ARRAY");  // está vacío...
  console.log(trx_data);

res.sendStatus(200);

});
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema con el código es que el array current_trx se vacía al final de cada iteración del bucle, pero aún se utiliza como referencia para el array trx_data. La solución sería crear un nuevo array para cada iteración del bucle, y agregar ese array como un elemento en el array trx_data. Aquí está el código actualizado:

    app.post("/api/test", (req, res) => {
    
      console.log(JSON.stringify(req.headers));
      console.log(req.body);
    
      var trx_data = [];
    
      for (let i = 0; i < req.body.trx.length; i++) {
        var current_trx = [];
        current_trx.push(parseFloat(req.body.trx[i].trx_amt));
        current_trx.push(req.body.trx[i].trx_crdr);
        current_trx.push(req.body.trx[i].trx_tran_type);
        current_trx.push(req.body.trx[i].trx_ref1);
    
        trx_data.push(current_trx);
    
        console.log("CURRENT_TRX:");
        console.log(current_trx);
    
      }
    
      console.log("TRX_DATA ARRAY");
      console.log(trx_data);
    
      res.sendStatus(200);
    
    });
    

    Esto creará un array multidimensional donde cada elemento es un array que contiene los valores para una transacción.

Comments are closed.