Estoy intentando escribir un servidor usando express js, pero cuando envío una solicitud de obtención a mi punto final desde otro servidor, la respuesta se recibe y es exitosa, pero no contiene los datos que envió el servidor después de res.send(data) .
aqui esta el servidor
const express = require("express"); const app = express(); const cors = require("cors"); const corsOptions = { origin: ["http://localhost:6000"], optionsSuccessStatus: 200, credentials: true, }; app.use(cors(corsOptions)); app.use(express.json()); app.get("/test", (req, res) => { res.send("hello") }) app.listen(4000)y aquí está el servidor que está enviando la solicitud
import fetch from "node-fetch"; const url = "http://localhost:4000/test" import express from "express"; const app = express() fetch(url) .then(response => { console.log(response) }) .catch(err => { console.log(err) }) app.listen(6000)la respuesta que se devuelve no es la cadena enviada desde el servidor, sino el objeto que contiene la respuesta http (que es demasiado grande para poner aquí), pero sin los datos originales, aunque especifica un estado de respuesta de 200 que sugiere que el se enviaron datos.
curiosamente, el servidor devuelve los datos originales cuando la solicitud se envía desde el símbolo del sistema usando curl, pero los encabezados CORS contienen explícitamente el puerto localhost de la solicitud. ¿Me estoy perdiendo una información importante sobre CORS, o este error es el resultado de otra cosa?
Parece que está cerrando sesión en la respuesta de búsqueda, que se verá como un objeto enorme con toneladas de datos incomprensibles.
Debe llamar a un método en esa respuesta para ver los datos reales de respuesta del servidor. Hay response.json() y response.text() para nombrar 2 de ellos. ver documentos
Probar:
fetch(url) .then(response => response.text()) .then(response => { console.log(response) }) .catch(err => { console.log(err) })fetch() por sí mismo devuelve una promesa que se resuelve solo en el objeto de respuesta que incluye los encabezados y el flujo abierto, pero NO el cuerpo de la respuesta. Todavía no ha leído el cuerpo de respuesta real. Para hacerlo, debe llamar a uno de los métodos que lee el cuerpo, como .text() o .json() .
import fetch from "node-fetch"; const url = "http://localhost:4000/test" fetch(url).then(response => { return response.text(); // <==== tell it to read the body here }).then(result => { console.log(result); }).catch(err => { console.log(err) }); O, a veces parece un poco más claro si usa async/await :
import fetch from "node-fetch"; const url = "http://localhost:4000/test" async function run() { let response = await fetch(url); // sends request and gets headers let text = await response.text(); // reads the actual body return text; } run().then(text => { console.log(text); }).catch(err => { console.log(err); });