2013-04-11 11 views
57

Używam NodeJS z Expressem. Jak odróżnić zwykłe żądanie przeglądarki od żądania AJAX? Wiem, że mogę sprawdzić nagłówki żądań, ale czy Node/Exprsss ujawniają te informacje?Wykrywanie żądań AJAX na NodeJS za pomocą Express

+3

zawsze pocieszyć. log() obiekt req. W ten sposób mogę sprawdzić liczbę użytecznych obiektów, które zawiera. –

+1

@AkshatJiwanSharma Zacząłem też to robić, szalenie jest myśleć, że wcześniej nie używałem tej techniki! – sharkman

Odpowiedz

102

Większość ram ustawić nagłówek do XMLHttpRequestX-Requested-With, dla którego Express test:

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

Dokładnie to, czego chciałem, dzięki. – michael

+9

i co dla frameworków, które ** nie ** ustawiają? Jak AngularJS? –

35

W przypadku req.xhr nie jest ustawiony, na przykład w ramach takich jak angularjs, where it was removed, to należy również sprawdzić czy nagłówek może zaakceptować odpowiedź JSON (lub XML, czy cokolwiek XHR wysyła jako odpowiedź zamiast HTML).

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

Oczywiście trzeba trochę zmodyfikować drugą część, aby dopasować ją do konkretnego przypadku, ale powinna to być bardziej kompletna odpowiedź.

Idealnie kątowa zespół powinien nie zostały usunięte, ale powinny rzeczywiście znaleźć lepszego rozwiązania problemu wstępnego lotu Cors”, ale tak to spoczywa teraz ...

+0

Podoba mi się również rozwiązanie sugerowane w linku: po prostu dodaj 'X-Requested-With' z powrotem do' $ httpProvider', jeśli zależy ci na tej funkcjonalności. – robertklep

+0

Yup, to jeden sposób, ale na wypadek, gdyby inne frameworki zostały znalezione z równie leniwymi programistami, to jest to dla nich :) –

+0

Dla API do użytku wewnętrznego, uważam, że dodanie nagłówka z powrotem jest właściwym rozwiązaniem. Jeśli twój interfejs API będzie używany przez inne osoby, to na szczęście. Chociaż możesz wymagać od deweloperów dodania tego nagłówka: programiści powinni być na tyle sprytni, aby móc to zrobić. –

Powiązane problemy