2013-04-11 8 views
57

Sto utilizzando NodeJS con Express. Come posso distinguere tra una normale richiesta del browser e una richiesta AJAX? So che potrei controllare le intestazioni delle richieste ma Node/Exprsss espone queste informazioni?Rilevamento di richieste AJAX su NodeJS con Express

+3

ho sempre consolo. log() l'oggetto req. In questo modo posso controllare un numero di oggetti utili che contiene. –

+1

@AkshatJiwanSharma Ho iniziato a fare anche questo, è pazzesco pensare che non ho usato questa tecnica prima! – sharkman

risposta

102

maggior parte dei quadri impostare il X-Requested-With intestazione per XMLHttpRequest, per i quali Express ha un test:

app.get('/path', function(req, res) { 
    var isAjaxRequest = req.xhr; 
    ... 
}); 
+0

Esattamente quello che volevo, grazie. – michael

+9

e cosa per i quadri che ** non lo ** impostano? Come AngularJS? –

35

Nel caso in cui il req.xhr non è impostato, dicono in contesti quali Angularjs, where it was removed, allora si dovrebbe anche controllare se l'intestazione può accettare una risposta JSON (o XML o qualsiasi altra cosa che l'XHR invia come risposta anziché HTML).

if (req.xhr || req.headers.accept.indexOf('json') > -1) { 
    // send your xhr response here 
} else { 
    // send your normal response here 
} 

Naturalmente, si dovrà modificare la seconda parte un po 'per abbinare il vostro caso d'uso, ma questo dovrebbe essere una risposta più completa.

Idealmente, la squadra angolare non avrebbe dovuto rimosso, ma dovrebbe avere effettivamente trovato una soluzione migliore per il problema pre-volo dei CORS', ma è così che riposa ora ...

+0

Mi piace anche la soluzione suggerita nel collegamento: basta aggiungere 'X-Requested-With' a' $ httpProvider' se si dipende da questa funzionalità. – robertklep

+0

Sì, è un modo, ma nel caso in cui vengano trovati altri framework con sviluppatori altrettanto pigri, allora è per loro :) –

+0

Per un'API per uso interno, credo che aggiungere l'intestazione sia la cosa giusta da fare. Se la tua API verrà utilizzata da altri, anche se la fortuna è davvero buona. Anche se potresti richiedere agli sviluppatori di aggiungere anche questa intestazione: gli sviluppatori dovrebbero essere abbastanza intelligenti da essere in grado di farlo. –