Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

336
Vistas
¿Por qué no puedo enviar el contenido de la solicitud HTTP como respuesta con express.js?

Estoy tratando de configurar un servidor web simple que devuelva el contenido de la solicitud como respuesta con node.js y express.js. Mi código es el siguiente:

 const express = require('express'); const app = express(); const port = 3000; app.get("/", function(request,response){ // console.log(request); response.send(request); }); app.listen(port, function() { console.log("Server started on port #" + port); });

Y me sale este error:

 TypeError: Converting circular structure to JSON --> starting at object with constructor 'Socket' | property 'parser' -> object with constructor 'HTTPParser' --- property 'socket' closes the circle at JSON.stringify (<anonymous>)

¿Qué está sucediendo exactamente y cómo puedo modificar mi código para lograr mi objetivo inicial? Quiero devolver una respuesta que contenga el contenido de la solicitud. Puedo console.log(request) sin ningún problema, así que estoy aún más confundido aquí. Intenté buscar este error, pero la mayoría no parece aplicarse a este caso.

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Tenga en cuenta que el tipo de Request no es solo el contenido de la solicitud, puede leer sobre esto en la documentación oficial de Node.js. En particular, el tipo representa una solicitud en curso cuyo encabezado ya se ha puesto en cola . No es la solicitud completa: ¡el cuerpo aún puede enviarse cuando se llama a su función! Este es un patrón común en las bibliotecas HTTP, ya que puede procesar los encabezados HTTP antes de que el cuerpo esté listo para enviarse.

Es un objeto complejo, que tiene referencias circulares en su interior. Significa que alguna propiedad del objeto apunta a otra propiedad del mismo objeto, y no puede representar eso en JSON . Aquí hay una buena pregunta al respecto . Todavía puede hacer un console.log porque la función maneja las referencias circulares con gracia.

Para devolver la solicitud, debe esperar explícitamente a que el cuerpo se envíe por completo (que puede venir dividido en partes). Nuevamente, los documentos oficiales cubren esto:

 app.get("/", function(request,response){ let body = []; request.on('data', (chunk) => { body.push(chunk); }).on('end', () => { body = Buffer.concat(body).toString(); // at this point, `body` has the entire request body stored in it as a string response.send(body); }); });

Si desea extraer otra información de la solicitud, puede consultar la documentación sobre cómo hacerlo, pero no asuma que la request o el tipo de response son solo sus contenidos.

EDITAR: No me di cuenta de que está usando express.js , que tiene un tipo de request diferente. Los principios son los mismos, pero el cuerpo se expone de una manera diferente, puede encontrar cómo en la documentación oficial :

 var express = require('express') var app = express() app.use(express.json()) // for parsing application/json app.use(express.urlencoded({ extended: true })) // for parsing application/x-www-form-urlencoded get('/', function (req, res) { res.json(req.body) })
about 4 years ago · Juan Pablo Isaza Denunciar

0

¿Qué necesita saber sobre la solicitud? Método, url, encabezados, consulta, parámetros... simplemente extraiga lo que necesita:

 app.get("/", function(request,response){ const { headers, method, url, search } = request; response.json({ headers, method, url, search }); });

No debe devolver la solicitud completa, ya que es un objeto complejo que nunca estuvo destinado a serializarse.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda