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

285
Views
No se pueden establecer encabezados después de enviarlos al cliente [ERR_HTTP_HEADERS_SENT]

Entendí por qué era un error, probé las sugerencias como return o do function aysnc, pero no pude solucionarlo.

Tengo documentos tan largos como find.lenght y 100 subdocumentos. Es por eso que uso dos bucles. Cuando se completa la primera iteración y se encuentra el segundo valor coincidente, el servidor se bloquea. Sin servidor funciona.

Tengo documentos llamados 0,1,2 y hay 100 registros de monedas criptográficas de 0 a 100 en ellos. Agregué una imagen. Por ejemplo, USDT está en [0,3], [1,43], [2,13] y quiero enviar los tres.

 app.post('/', (req, res) => { print(req, res) }) function print(req, res) { MongoClient.connect(url, function (err, db) { if (err) throw err; var dbo = db.db("cryptoDb"); dbo.collection("coinTable").find({}).toArray(function (err, find) { if (err) throw err; for (i = 0; i < find.length; i++) { let found = false; for (j = 0; j < 100; j++) { //console.log(i + " " + j) let id = Capitalize(req.body.coinName); if (find[i].result[j].name == id || find[i].result[j].symbol == id.toUpperCase()) { // console.log(find[i].result[j]); res.send(find[i].result[j]); found = true; } } if (!found) { console.log("Not found") } } db.close(); }); }); function Capitalize(s) { return s[0].toUpperCase() + s.slice(1).toLowerCase(); } }

árbol de mango

mongotree2 Muchas gracias !

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Este error proviene de intentar enviar más de una respuesta a la misma solicitud http.

Tienes res.send(find[i].result[j]); dentro de un ciclo for y no detiene el ciclo interno después de enviar una respuesta.

Por lo tanto, este código es capaz de intentar enviar múltiples respuestas a la misma solicitud que no puede hacer.

No está claro en el código exactamente cuál es la solución deseada. Si solo desea enviar la primera respuesta, puede cerrar la base de datos y return después de enviar una respuesta que terminará ambos bucles for .

Si tiene la intención de enviar varios datos, acumule los datos que desea enviar en una matriz y envíe todos los datos una vez que se hayan realizado todos los bucles.


Si está intentando enviar una matriz de todos los resultados coincidentes, puede hacer esto:

 app.post('/', (req, res) => { print(req, res) }) function print(req, res) { MongoClient.connect(url, function(err, db) { if (err) { console.log(err); res.sendStatus(500); return; } var dbo = db.db("cryptoDb"); dbo.collection("coinTable").find({}).toArray(function(err, find) { if (err) { console.log(err); res.sendStatus(500); db.close(); return; } const id = Capitalize(req.body.coinName); const idUpper = id.toUpperCase(); const results = []; for (let findItem of find) { for (let j = 0; j < 100; j++) { if (findItem.result[j].name == id || findItem.result[j].symbol == idUpper) { results.push(findItem.result[j]); } } } res.send(results); if (!results.length) { console.log("No results"); } db.close(); }); }); function Capitalize(s) { return s[0].toUpperCase() + s.slice(1).toLowerCase(); } }

Otras notas:

  1. Cambié el manejo de if (err) { ... } en su llamada a la base de datos para enviar una respuesta de error. Todas las rutas a través de su controlador de solicitudes deben enviar una respuesta o hacer que se envíe una respuesta.

  2. El ciclo codificado de 0 a 99 es un poco extraño ya que no verifica si la matriz .result realmente tiene tantas entradas. Eso podría resultar en un error de tiempo de ejecución si los datos no son exactamente como los espera.

  3. No tiene ninguna validación de los datos de req.body que está esperando. Todos los datos que llegan del usuario deben validarse antes de asumir que es lo que espera.

over 4 years ago · Santiago Trujillo Report

0

Tiene res.send dentro de su ciclo for, supongo que desea que se cierre una vez que haya terminado, así que agregue break a su ciclo.

 var senddata = []; for (j = 0; j < 100; j++) { // <-- For loop, it will send multiple times // console.log(i + " " + j) let id = Capitalize(req.body.coinName); if (find[i].result[j].name == id || find[i].result[j].symbol == id.toUpperCase()) { // console.log(find[i].result[j]); senddata[senddata.length] = find[i].result[j]); // Add to array found = true; } if (!found) { console.log("Not found") } } res.send(JSON.stringify({senddata})); // Send unparsed data
over 4 years ago · Santiago Trujillo 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!