Response incompleto.

50 views
Skip to first unread message

RuGI

unread,
Mar 18, 2012, 12:09:12 AM3/18/12
to nodej...@googlegroups.com

Hola a todos...
Un gusto encontrar el grupo, :)

Les escribo por que, he comenzado a probar node.js, el potencial es enorme y, nunca está demás conocer lo "nuevo". :)

Estoy haciendo un pequeño ejercicio con require('http'); que devuelva json. 
La idea es usar node.js como un servidor que devuelva 
métricas en formato json y graficar con alguna de las tantas opciones.

Estoy usado jquery para recuperar el valor, pero, por alguna razón, aun cuando se realiza la petición 
y se devuelve un estado 200, no logro recuperar el  valor.

Soy programador Java, hice un pequeño servlet, en él, devuelvo el mismo mime-type y la misma cadena
y funciona sin problemas. El response se lee correctamente.

Este es el código que tengo 

var http = require('http');
http.createServer(function (req, res) {
  console.log("--- peticion");
  res.writeHead(200, {'Content-Type': 'application/json;charset=UTF-8'});
  res.write("{\"max\":\"66\"}");
  res.end("\n");
}).listen(1337);

Y adjunto una imagen con lo que me muestra FireBug.
[imagen.png]

El navegador, sí muestra el resultado.
[imagen2.png]

¿Alguna idea de cómo resolver esto?

Saludos!
---
RuGI
Imagen.png
Imagen2.png

Leandro Lopez

unread,
Mar 18, 2012, 2:47:50 AM3/18/12
to nodej...@googlegroups.com
Prueba a hacer un JSON stringify antes de mandarlo.

Saludos
Leandro lopez

> <Imagen.png>
> <Imagen2.png>

Carlos Villuendas Zambrana

unread,
Mar 18, 2012, 8:57:50 AM3/18/12
to nodej...@googlegroups.com
Hola Rugi,

Encantado de darte la bienvenida al grupo :).

Respondiendo a tu pregunta, creo que hay un pequeño problema de concepto con ella. A ver si consigo explicarme.

El fragmento de código que tu has puesto es básicamente el hoy mundo de Node, lo que estas haciendo es crear un servidor a la escucha en el puerto 1337 que responde a GET / con un 200 y un string en el body.

Por eso motivo cuando lo llamas directamente desde el browser puedes ver la cadena sin problemas. Ya que es exactamente lo que se espera que haga.

Pero luego tratas de obtener esta cadena medienta AJAX y ya no te funciona, cosa que tiene sentido si lo que tratas de hacer es una llamada AJAX, ya que este tipo de llamadas solo funcionan ( versión abreviada ) si se hacen dentro del mismo dominio. Y para que esto pudiera ocurrir, tendrías que configurar tu servidor para que respondiera a dos URI distintas:

1.- GET / => Aquí es donde te bajas el JS mínimo para poder usar jQuery en la página servida por este servidor

2.- GET /myWebService => Aquí es donde tienes que responde con lo que tiene puesto ahora mismo.

De esta forma si podrías hacer llamadas ajax con jQuery.

Aunque por lo que comentas no es exactamente eso lo que quieres hacer. Me ha parecido entender que quieres llamar a este server desde una página servida desde OTRO servidor. Si fuera este el caso AJAX no te vale, tendría que utilizar JSONP. Para poder usar JSONP tendrás que preparar tu servidor para interpretar correctamente la URL del objeto Request. Yo particularmente te recomiendo que no te compliques las vida trasteando con objectos nativos y cosas así. Tira del alguno de los muchos Framework que ya hay para eso y todo será mucho más simple. Usa Express que ya tiene un parseador para todo este tipo de cosas y además puedes usar res.json(myObject) para tener respuesta JSON sin tener que complicarte mucho El problema de usar ese shortcuts es que no te configura apropiadamente las las cabeceras de las respuesta, ya que usa un Mime-Type genérico "application/json", y si lo que quieres es montarte tu propia API como me ha parecido entender, seguramente quieras tener un cabecera del estilo "application/vnd.myapi+json", pero bueno, eso ya es más cosa tuya y de la arquitectura de tu API.

Espero que te sirva para orientarte un poco, de todos modos cualquier cosa por aquí nos tienes :)

Ya veras como te va a molar mucho Node.

Carlos.

> <Imagen.png><Imagen2.png>

RuGI

unread,
Mar 18, 2012, 9:23:13 AM3/18/12
to nodej...@googlegroups.com
Leo, Carlos gracias por sus respuestas.
Carlos.... hombre!, muy detallado el comentario :)

Sabía que algo tenía que ver que estuviera usando el código del "hola mundo" jejejej XD
Entiendo que node.js es potente pero, entiendo también que tanta potencia tiene sus peculiaridades.

Voy a seguir sus recomendaciones,  y las estaré comentando.

Un gusto participar en la lista. 

Saludos!!!
---
RuGI

RuGI

unread,
Mar 19, 2012, 2:02:35 PM3/19/12
to nodej...@googlegroups.com
Hola !!

Pues de momento me ha funcionado el jsonp.

Básicamente, lo que quería probar era llevar datos desde java hasta node.js, usando redis.os ( http://redis.io/clients ) como puente.

He probado con el cliente recomendado: node_redis (https://github.com/mranney/node_redis) y con esto ya es transparente la recuperación de datos.

Es apenas un demo pero,  el canal completo de comunicación está listo.
Java escribe al server redis, desde node.js uso un cliente para recuperar ese valor, ese valor lo devuelvo como json al brower.

Del lado de node.js no hubo mucho que modificar:
var max = // esta variable recibe el valor del cliente redis
// validar que es get.
  if ( req.method === 'GET' ) {
        // validar que es la peticion adecuada, uso indexof por los parametros que se agregan para el jsonp
         }if(req.url.indexOf('/hack1')>=0){
            // mi metodo callback se llama upV , solo recibe el valor actualizado de max
             res.write("upV("+max+")");
       }
  }


Del lado del cliente solo se requiere usar la invocación jquery adecuada.
    function hack1(){
        jQuery.ajax({
            dataType: 'jsonp',           
            data:  '',
            jsonp: 'jsonp_callback',
            url: 'http://127.0.0.1:1337/hack1?method=upV',
            success: function () {
                //
            }
        });        
    }

Y voilá!


:)


Seguiré haciendo algunas  pruebas.. 
Muchas gracias...saludos!!!
---
RuGI

carlos villuendas

unread,
Mar 20, 2012, 12:36:16 PM3/20/12
to nodej...@googlegroups.com
Hola,

Me alegro que al final te hay funciona, y tiene muy buena pinta la demo que has mostrado :)

Espero que nos tengas al tanto de los avances a ver que tal te queda al final!

Un Saludo,
CARLOS.
Reply all
Reply to author
Forward
0 new messages