2017-01-31 2 views
1

Lassen Sie uns sagen, dass ich ein kleines Stück Code haben:node.js express: Wie kann ich wissen, ob eine Anfrage eine AJAX-Anfrage ist?

var express = require('express'); 
var app = express(); 

app.get('/', function(req, res){ 
    //I want to acccess 'req' and get info whether it's an AJAX call 
}); 

app.listen(3000); 

Als ich in der app.get (..) Funktion gehen, ich will ein AJAX-Aufruf gesendet wissen, ob die GET-Anforderung ist. Was ist das Feld im Objekt 'req', das mir das sagen kann?

+1

var isAjax = req.xhr; – Omidam81

+0

möglich duplizieren http://stackoverflow.com/questions/18902293/nodejs-validating-request-type-checking-for-json-or-html –

+0

Fügen Sie einfach einen Parameter hinzu, wenn Sie XHR anfordern. – modernator

Antwort

2
app.get('/', function(req, res){ 
    //I want to acccess 'req' and get info whether it's an AJAX call 
    if(req.xhr){ 
    //the request is ajax call 
    } 
}) 
+0

Dies wird nicht funktionieren, wenn Sie die API 'fetch' verwenden. – lonesomeday

-1
var express = require('express'); 
var app = express(); 

app.get('/', function(req, res){ 
    var isAjax = req.xhr; 
}); 

app.listen(3000); 
1

Der Header X-Requested-With: XMLHttpRequest HTTP-Header wird an einen AJAX-Request nicht automatisch hinzugefügt, entweder mit fetch oder mit der altmodischen Verwendung des XMLHttpRequest Objekts. Es wird oft von Clientbibliotheken wie jQuery hinzugefügt. Wenn die Kopfzeile vorhanden ist, wird sie in Express von request.xhr dargestellt.

Wenn Sie es auf die Anfrage hinzuzufügen (die einfachste Lösung für dieses Problem) Sie es als Standard-Header mit fetch hinzufügen:

fetch(url, { 
    headers: { 
     "X-Requested-With": "XMLHttpRequest" 
    } 
}); 

Dies wird nun in req.xhr widerspiegeln.

Ein besser Lösung ist die Accept Header auf einen sinnvollen Wert einzustellen. Wenn Sie JSON wollen zurückgegeben werden, setzen Accept zu application/json:

fetch(url, { 
    headers: { 
     "Accept": "application/json" 
    } 
}); 

Sie dann diese mit req.accepts testen können:

switch (req.accepts(['html', 'json'])) { //possible response types, in order of preference 
    case 'html': 
     // respond with HTML 
     break; 
    case 'json': 
     // respond with JSON 
     break; 
    default: 
     // if the application requested something we can't support 
     res.status(400).send('Bad Request'); 
     return; 
} 

Das ist viel mächtiger als der req.xhr Ansatz.

Verwandte Themen