Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

334
Views
¿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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!