2011-09-22 5 views
5

Quiero determinar si las solicitudes entrantes son de un bot (por ejemplo, google, bing), o un humano, y servir datos diferentes para cada uno, por ejemplo, json datos para javascript del cliente para construir el sitio o html preprocesado.expressjs node.js servir datos diferentes a google/etc bot y tráfico humano

Usando expressjs, ¿hay alguna manera fácil de hacerlo? Gracias.

+0

Para su información, a los motores de búsqueda no les gusta cuando obtienen un contenido sustancialmente diferente de lo que obtiene un cliente normal. – icktoofay

+0

@icktoofay es el mismo contenido, si lees la documentación de ajax de google expresamente permiten esto – Harry

Respuesta

3

te recomiendo que la respuesta de acuerdo con el tipo MIME solicitado (que está presente en el "Aceptar" de cabecera) usted puede hacer esto con expreso de esta manera:

app.get('/route', function (req, res) { 
    if (req.is('json')) res.json(data); 
    else if (req.is('html')) res.render('view', {}); 
    else ... 
}); 
+0

esta es una mejor manera de tratar con las solicitudes, gran respuesta. –

4

Puede comprobar el req.header ('User-Agent') para 'Mozilla/5.0 (compatible; Googlebot/2.1; + http://www.google.com/bot.html' Si es que sabes que es Google y puede enviar datos diferentes

.. .

http://www.google.com/support/webmasters/bin/answer.py?answer=1061943

Como llegar cabeceras http://expressjs.com/4x/api.html#req.get

+0

Gracias, sí, estaba haciendo esto, ¿no hay forma de generalizar a través de bots, no solo de bots específicos? – Harry

+0

Cada bot tiene un agente de usuario diferente, por lo que deberá saber cuál es cada uno. El encabezado de aceptación puede ser una mejor solución. Es decir, ni siquiera pienses en bots, solo piensa en lo que cada 'cliente' (navegador, JavaScript, Bot) puede aceptar. –