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.

¿Por qué es req.body un objeto vacío?

Estoy tratando de aprender XMLHttpRequests. Estoy tratando de enviar alguna entrada al servidor, pero cuando llega, el objeto está vacío, como {}
Esa setRequestHeader que comenté, si está presente, el objeto se imprime correctamente, pero obtengo un error que dice que debería estar abierto en el navegador. PERO si lo coloco después de la declaración open(), deja de funcionar nuevamente y el objeto llega vacío. También he intentado todo eso y también hacer JSON.stringify a la variable antes de enviarla, pero tampoco ha funcionado.

//server.js
const express = require('express');
const app = express();
const cors = require('cors')

app.use(cors())

app.use(express.urlencoded({extended:true}))

app.post('/frases', function(req, res) {
    console.log(req.body);
    const frase = new phrase(req.body);
    // console.log(frase);
})

app.listen(3000, () => console.log('escuchando en el puerto 3000...'));

//script.js
var form = document.getElementsByTagName('form')[0];

const xhr = new XMLHttpRequest();
// xhr.setRequestHeader('Content-Type', 'application/json');

form.onsubmit = (e) => {
    e.preventDefault();
    const thisName = form.elements[0].name;
    const thisValue = form.elements[0].value;

    const frase = {[thisName]:thisValue};
    console.log(frase)
    xhr.open('POST', 'http://localhost:3000/frases');
    xhr.send(frase);

}; 


<!-- index.html -->
    <form action="http://localhost:3000/frases" method="post">
        <label for="frasefavorita"> ¿Cuál es tu frase favorita?
            <input id='frase' type="text" name="frasefavorita">
            <button id='send-frase' type="submit">Enviar</button>
    </label></form>
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Hay algunas cosas que podrían estar causando el problema. Un posible problema es que el servidor no esté configurado correctamente para manejar datos JSON. Para solucionar esto, puedes intentar establecer el encabezado content-type a ‘application/json’ y convertir los datos en una cadena antes de enviarlos.

    Otro problema podría ser con el momento en que se llama al método setRequestHeader. Si se llama antes del método open, podría estar causando problemas en la solicitud. Intenta mover esta línea de código después del método open.

    Además, verifica si la solicitud se está enviando de forma asíncrona o sincrónica. Si se envía de forma sincrónica, bloqueará el hilo de la interfaz de usuario hasta que se complete la solicitud, lo que podría causar un rendimiento lento u otros problemas.

    En general, podría ser útil revisar alguna documentación sobre cómo utilizar correctamente XMLHttpRequest y asegurarse de que el servidor esté configurado para manejar la solicitud correctamente.

Comments are closed.