Estoy usando express y la solicitud POST se ve así
router.post('/', function(req, res, next){ var data = req.body; getRandom(data, function(value){ res.json({value: value}); }); });POST se envía a través de ajax y luego actualiza textarea con nuevos datos.
$.ajax({ type: "POST", url: "/", data: JSON.stringify(datareq), dataType: 'json', contentType: 'application/json', success: function(x){ $.each(x, function(index, value) { $('.textarea').append(value + '\n'); }); }, error: function(x) { console.log(x + 'error'); } });Cómo enviar esto usando un POST y algunas respuestas. El usuario recibió un dato en el área de texto cuando cb terminó y luego otro dato y así uno hasta el final.
<textarea> data 1 - 1sec data 2 - 2sec leater data 3 - 3 second later ... </textarea>Agrego Tiempo (1 segundo...) solo para mostrar que la devolución de llamada tiene mucho que hacer para enviar otra respuesta.
Por supuesto, esto no funciona porque res.send () cerró la conexión y recibí un error
Entonces, ¿cómo lograr mi idea, enviar simultáneamente después de la solicitud posterior? Quiero dar datos de usuario muy rápido, luego otro cuando esté listo sin esperar a todos y luego enviar la respuesta.
no puedes
Razón:
Http cierra la conexión después de enviar la respuesta. No puedes mantenerlo abierto y enviando múltiples respuestas al cliente. HTTP no lo admite.
Solución 1:
Simplemente coloque un temporizador en el lado del cliente y solicítelo periódicamente.
Solución 2 (recomendada):
Use socket y pase datos a través de él. socket.io es la biblioteca de sockets para aplicaciones nodejs . Es muy fácil de usar. Configure una conexión, siga enviando datos desde el servidor y recíbalos del lado del cliente.
Solo para agregar la respuesta. Esta respuesta explica por qué res.send cierra la conexión.