Estoy tratando de enviar algunos datos sobre los usuarios (en este ejemplo, solo el nombre y el apellido) desde un archivo html en un servidor web a través de XMLHTTPRequest a un servidor Node Express. Funciona bien en un servidor local, simplemente no puedo hacer que funcione en el servidor web. Esta es la parte crucial de mi html:
<br> <div class="textbold">First Name</div> <input name="fn" id= "first"><p> <div class="textbold">Last Name</div> <input name="ln" id="last"><p> <br> <input type="button" class="button" onclick="request()" value="Send"> <script> function request() { var firstname = document.getElementById("first").value var lastname = document.getElementById("last").value var xhr = new XMLHttpRequest() xhr.open('GET', "http://urlofmywebbrowser.com/request") xhr.setRequestHeader("Content-Type", "multipart/form-data"); xhr.send("firstn="+firstname+"&lastn="+lastname) } </script>Este es el script del servidor express:
var express = require('express') var app = express() var port = 3000 app.get("/request", function (req) { let firstname = req.query.firstn let lastname = req.query.lastn console.log(vorname, nachname)})Luego, el script continúa guardando los datos en un archivo json, que nuevamente funciona bien en mi servidor local, pero aún no pude probarlo en el servidor web. Creo que los posibles errores pueden ser con la URL o el número de puerto, pero probé varias combinaciones y no puedo hacer que funcione. ¡Gracias de antemano por tu ayuda!
Una solicitud HTTP puede incluir datos en:
Si está realizando una solicitud GET, debe ir en la cadena de consulta de la URL.
Lo estás pasando a send() que lo pone en el cuerpo. Esto no está permitido, por lo que será ignorado.
Si lo coloca en el cuerpo (lo que significa cambiar a una solicitud POST), entonces debe hacer que el Content-Type coincida con el formato de datos que está utilizando.
Está utilizando application/x-www-form-urlencoded pero afirma que está enviando multipart/form-data .
Si lo pones en el cuerpo (ver arriba), entonces Express requiere que lo leas desde req.body y no desde req.query .
También requiere que agregue un middleware de análisis de cuerpo adecuado.
No debe olvidar " para finalizar un literal de cadena
No debe mezclar cadenas para construir formatos de datos. Eso no trata con caracteres especiales en la entrada. Use API que los construirán por usted.
Suponiendo que está intentando realizar una solicitud GET, entonces:
Eliminar xhr.setRequestHeader("Content-Type", "multipart/form-data");
y
Cambie xhr.send("firstn="+firstname+"&lastn="+lastname) a xhr.send()
y
Cambio:
xhr.open('GET', "http://urlofmywebbrowser.com/request")a
const url = new URL("http://urlofmywebbrowser.com/request"); url.searchParams.append("firstn", "firstname"); url.searchParams.append("lastn", "lastname"); xhr.open('GET', url);