2010-10-09 22 views
7

en este ejemplo muy simple:cómo obtener información sobre el cliente en Node.js

var sys = require("sys"), 
    http = require("http"); 

http.createServer(function(request, response) { 
    response.writeHead(200, {"Content-Type": "text/plain"}); 
    response.end("Hello World!"); 
}).listen(8080); 

sys.puts("Server running at http://localhost:8080/"); 

1.) ¿Qué tipo de información puedo obtener desde el cliente? como navegador, resolución de pantalla, etc.

2.) ¿Cómo puedo enviar información del cliente al servidor, como el parámetro?

gracias!

Respuesta

5

No se puede obtener la información de resolución de la pantalla, pero se puede obtener el agente de usuario del encabezado de solicitud "User-Agent"

+0

¿Cuál es el código necesario para esto? He intentado req.getHeader ('User-Agent') pero no creo que eso funcione. – zzaman

+11

@zzaman try req.headers ['user-agent'] - todos los encabezados en el nodo [son minúsculas] (http://nodejs.org/docs/latest/api/http.html#http_request_headers). – phreakhead

6

¿Has leído el API docs? El objeto req es un objeto http.ServerRequest como se documenta allí. Es HTTP, y cosas como la resolución no son parte del protocolo. Lo que puede obtener es un agente de usuario, y desde allí puede recuperar más información utilizando otro servicio.

Recuerde que node.js es una aplicación independiente, no se ejecuta en un navegador, es una aplicación de servidor HTTP que se ejecuta en un intérprete JS.

+0

Enlace muerto, sólo un FYI – TERMtm

+0

Gracias - actualizado. –

16

1) URL de referencia, la dirección IP, agente de usuario, tamaño de pantalla y otra stats. También puede obtener la ubicación geográfica, pero eso es más complicado.

2) Algunos datos están disponibles en los encabezados, por lo que se envían en cada solicitud; otros datos, como el tamaño de la pantalla, son un poco más complicados, por lo que querrá enviar un ajax para enviarlos.

// Somewhere on your page(s) - here we use jQuery 
$(document).ready(function(){ 
    // Check if they have been logged 
    if ($.cookie('logged') == null){ 
    // Send screen size and whatever else that is not available from headers 
    $.post('/logger', { width: screen.width, height: screen.height }, function(res) { 
     // Set cookie for 30 days so we don't keep doing this 
     $.cookie('logged', true, { expires: 30 }); 
    }); 
    } 
}); 

// Server side - example is an Express controller 
exports.logger = function(req, res) { 
    var user = { 
    agent: req.header('user-agent'(, // User Agent we get from headers 
    referrer: req.header('referrer'), // Likewise for referrer 
    ip: req.header('x-forwarded-for') || req.connection.remoteAddress, // Get IP - allow for proxy 
    screen: { // Get screen info that we passed in url post data 
     width: req.param('width'), 
     height: req.param('height') 
    } 
    }; 
    // Store the user in your database 
    // User.create(user)... 
    res.end(); 
} 
+0

Para 'referrer', los navegadores [enviarán] (https://en.wikipedia.org/wiki/HTTP_referer#Etymology)' referer' con una sola R. Express no lo traduce a la ortografía correcta, por lo que las necesidades anteriores 'req.headers ['referer']'. – Arjan

+0

@Arjan son intercambiables. Express puede manejar el éter uno. https://github.com/expressjs/express/blob/master/lib/request.js#L76 – cyberwombat

+0

Eso es extraño, ya que probé antes de publicar ese comentario (e incluso agregué un comentario en mi código explicando que Express no se traduce ... .). Verificará de nuevo mañana, pero su enlace no miente ... :-) – Arjan

Cuestiones relacionadas