Tengo un servidor web muy simple:
const ws = require('http'); ws.createServer( function(req,res) { console.log('request received'); res.write('Hello world'); res.end(); }) .listen(1234);El servidor funciona. Cuando abro el navegador en localhost: 1234, aparece el texto Hello World. Cuando envío un GET a localhost:1234 desde el cliente REST, obtengo:
HTTP/1.1 200 OK Date: Fri, 03 Dec 2021 20:10:12 GMT Connection: close Transfer-Encoding: chunked Hello worldAhora, me gustaría escribir una prueba, pero tengo problemas para encontrar alguna forma de extraer el texto "Hola mundo" de la respuesta. Por el momento, mi código de prueba se ve así:
const http = require('http'); let req = http.get('http://localhost:1234',(res)=>{ let txt = res.read(); console.log(txt); });Esto siempre devuelve nulo.
También he intentado:
const http = require('http'); let req = http.get('http://localhost:1234',(res)=>{ let data = []; res.on('data',(chunk)=>data.push(chunk)); console.log(data); });Esto devuelve una matriz vacía.
Cuando depuro y observo el objeto res, es fácil encontrar todo en la respuesta (principalmente en res.headers), excepto el texto Hello World. He visto muchos ejemplos para extraer datos enviados en formato JSON, etc., pero quiero comenzar con el ejemplo más simple posible (solo texto sin formato) y parece que no puedo encontrar ninguna forma de hacerlo. Parece que todo lo que el navegador puede devolver debería estar disponible cuando envío un GET a través del módulo HTTP, pero no puedo encontrarlo.
Me las arreglé para averiguarlo. Especie de. Encontré algo que funciona, pero aún no entiendo completamente la mecánica.
Los siguientes trabajos y registros
Hola Mundo
a la consola
const http = require('http'); let req = http.get('http://localhost:1234',async (res)=>{ res.on('readable', () => { let txt=res.read().toString(); console.log(txt); }); });Parece que necesita escuchar el evento legible para obtener algo de read() y cuando lo hace, recupera el texto Hello world (sin embargo, como una matriz de Buffer, por lo que se necesita ToString()).
Del mismo modo, lo siguiente también funciona para el evento 'data':
const http = require('http'); let req = http.get('http://localhost:1234',(res)=>{ let txt = ''; res.on('data',(chunk)=>{ txt+=chunk.toString(); console.log(txt); }); });Tengo algunas preguntas de seguimiento, pero investigaré un poco más y volveré a preguntar en nuevas preguntas si no encuentro claridad.
puede leer la respuesta como json de esta manera:
archivo del servidor:
const ws = require('http'); ws.createServer( (request, response) => { console.log('request received'); response.write('{"body": "Hello World !"}'); response.end(); } ).listen(1234);Solicitar archivo:
const http = require('http'); http.get('http://localhost:1234', (response) => { response.on("data", (chunk) => { body = JSON.parse(chunk).body console.log(body); // return 'Hello World !' as text }) }).on('error', function(e) { console.log("Error message : " + e.message); });