2011-09-22 9 views
5

Voglio determinare se le richieste in arrivo provengono da un bot (ad es. Google, bing) o da un essere umano e servono dati diversi per ciascuna, ad esempio, dati json per client javascript per costruire il sito o html preelaborato.expressjs node.js serve dati diversi per google/etc bot e traffico umano

Utilizzo di expressjs, c'è un modo semplice per farlo? Grazie.

+0

FYI, i motori di ricerca tendono a non gradire quando ottengono contenuti sostanzialmente diversi da quello che ottiene un normale cliente. – icktoofay

+0

@icktoofay è lo stesso contenuto, se leggi la documentazione Ajax di google autorizzano espressamente questo – Harry

risposta

3

vi consiglio di risposta in base al tipo MIME richiesto (che è presente nell'intestazione "Accept") è possibile fare questo con espresso in questo modo:

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

questo è un modo migliore per gestire le richieste, ottima risposta. –

4

È possibile controllare il req.header ('User-Agent') per 'Mozilla/5.0 (compatible; Googlebot/2.1; + http://www.google.com/bot.html' Se è che tu sai che è Google e può inviare dati diversi

.. .

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

Come arrivare intestazioni http://expressjs.com/4x/api.html#req.get

+0

Grazie Sì, stavo facendo questo, non c'è modo di generalizzare attraverso i bot, non solo i bot specifici di destinazione? – Harry

+0

Ogni bot ha un diverso user-agent, quindi dovrai sapere quale è ciascuno. L'intestazione di accettazione potrebbe essere una soluzione migliore. Il significato non pensa nemmeno ai bot, pensa solo a ciò che ciascun "cliente" (Browser, JavaScript, Bot) può accettare. –