Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

289
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda