Detecting AJAX requests on NodeJS with Express
Solution 1:
Most frameworks set the X-Requested-With
header to XMLHttpRequest
, for which Express has a test:
app.get('/path', function(req, res) {
var isAjaxRequest = req.xhr;
...
});
Solution 2:
In case the req.xhr
is not set, say in frameworks such as Angularjs, where it was removed, then you should also check whether the header can accept a JSON response (or XML, or whatever your XHR sends as a response instead of HTML).
if (req.xhr || req.headers.accept.indexOf('json') > -1) {
// send your xhr response here
} else {
// send your normal response here
}
Of course, you'll have to tweak the second part a little to match your usecase, but this should be a more complete answer.
Ideally, the angular team should not have removed it, but should have actually found a better solution for the CORS' pre-flight problem, but that's how it rests now...