Recibo una respuesta del objeto cuando trato de usar la respuesta de Express, este es el HTML y el cliente js que estoy usando.
<html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> </head> <body> <form method="post"> <input id="names" name="names" type="text" /> </form> <button id="send">send</button> <p id="text"></p> <script> document.getElementById("send").addEventListener("click", () => { let datos = { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ names: document.getElementById("names").value, }), }; fetch("/myaction", datos) .then(function (response) { document.getElementById("text").innerHTML = response; }) .catch(() => { document.getElementById("text").innerHTML = "Error"; }); }); </script> </body> </html>estoy tratando de usar la respuesta de server.js en el elemento "texto", el servidor es
var express = require('express'); var bodyParser = require('body-parser'); var app = express(); app.use(express.json()) //Note that in version 4 of express, express.bodyParser() was //deprecated in favor of a separate 'body-parser' module. app.use(bodyParser.urlencoded({ extended: true })); //app.use(express.bodyParser()); app.get('/', function(req, res) { res.sendFile(__dirname + "/index.html"); }); app.post('/myaction', function(req, res) { res.send(req.body.names); }); app.listen(8088, function() { console.log('Server running'); });cuando la solicitud de búsqueda myaction express devuelve la consulta de nombre, pero no puedo usarla en la búsqueda porque imprime "[Respuesta del objeto]" en lugar del valor del formulario de nombre, ¿qué puedo hacer?
La "respuesta" que regresa de la búsqueda es un objeto que tiene más que solo los datos en la respuesta. Es un objeto de Response , lo que significa que contiene el código de estado (como 200), así como los datos. Por lo general, puede obtener los datos de la respuesta usando response.json() si es formato JSON, o response.text() si es texto. Estas funciones son asíncronas, por lo que también devuelven una Promesa. Entonces su código puede verse así:
fetch("/myaction", datos) .then(function (response) { return response.text(); // a Promise that will resolve to the data }) .then(function (text) { document.getElementById("text").innerHTML = text; }) .catch(() => { document.getElementById("text").innerHTML = "Error"; }); Cada vez que vea una cadena que parezca [object Object] , significa que está viendo un objeto Javascript que no tiene una función toString() significativa, por lo que es lo mejor que puede hacer para mostrarle el valor. Si no está seguro de qué tipo de objeto es, una buena técnica de depuración es generarlo usando console.log(obj) para que pueda ver cómo se ve. Eso generalmente te da una pista sobre con qué estás trabajando realmente.
La función de fetch global devuelve una promesa que se resuelve en un objeto deResponse . Este objeto contiene toda la información sobre la respuesta, como encabezados, estado, cuerpo, etc. Para obtener el cuerpo de la respuesta, primero deberá decodificar la respuesta.
En su caso, debe leer el cuerpo como una cadena, por lo que usaremos response.text() . Este es un método en el objeto Response . También devuelve una promesa que se resuelve en una cadena.
fetch("/myaction", datos) .then(function (response) { return response.text(); }) .then(function (text) { document.getElementById("text").textContent = text; }) .catch(() => { document.getElementById("text").textContent = "Error"; });