J'utilise NodeJS avec Express. Comment puis-je faire la différence entre une demande de navigateur ordinaire et une demande AJAX? Je sais que je pourrais vérifier les en-têtes de demande, mais Node/Exprsss expose-t-il ces informations?
La plupart des frameworks définissent le X-Requested-With
en-tête à XMLHttpRequest
, pour lequel Express a un test:
app.get('/path', function(req, res) {
var isAjaxRequest = req.xhr;
...
});
Dans le cas où le req.xhr
n'est pas défini, par exemple dans des frameworks tels que Angularjs, où il a été supprimé , vous devez également vérifier si l'en-tête peut accepter une réponse JSON (ou XML, ou tout ce que votre XHR envoie comme réponse) au lieu de HTML).
if (req.xhr || req.headers.accept.indexOf('json') > -1) {
// send your xhr response here
} else {
// send your normal response here
}
Bien sûr, vous devrez modifier légèrement la deuxième partie pour qu'elle corresponde à votre cas d'utilisation, mais cela devrait être une réponse plus complète.
Idéalement, l'équipe angular n'aurait pas dû le supprimer, mais aurait dû trouver une meilleure solution au problème de pré-vol du CORS, mais c'est ainsi repose maintenant ...