Ich verwende NodeJS mit Express. Wie kann ich den Unterschied zwischen einer normalen Browseranforderung und einer AJAX-Anforderung erkennen? Ich weiß, dass ich die Anforderungsheader überprüfen konnte, aber macht Node / Exprsss diese Informationen verfügbar?
75
Antworten:
Die meisten Frameworks setzen den
X-Requested-With
Header aufXMLHttpRequest
, für den Express einen Test hat:app.get('/path', function(req, res) { var isAjaxRequest = req.xhr; ... });
quelle
Falls das
req.xhr
nicht festgelegt ist, z. B. in Frameworks wie Angularjs, in denen es entfernt wurde , sollten Sie auch prüfen, ob der Header eine JSON-Antwort (oder XML oder was auch immer Ihr XHR als Antwort anstelle von HTML sendet) akzeptieren kann.if (req.xhr || req.headers.accept.indexOf('json') > -1) { // send your xhr response here } else { // send your normal response here }
Natürlich müssen Sie den zweiten Teil ein wenig anpassen, um ihn an Ihren Anwendungsfall anzupassen, aber dies sollte eine vollständigere Antwort sein.
Idealerweise hätte das eckige Team es nicht entfernen sollen, sondern tatsächlich eine bessere Lösung für das Problem des CORS vor dem Flug finden sollen, aber so ruht es jetzt ...
quelle
X-Requested-With
Rückseite hinzu,$httpProvider
wenn Sie von dieser Funktionalität abhängig sind.req.xhr
für AngularJS-Anforderungen arbeiten, indem Sie dies zu Ihrer$httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';