web-dev-qa-db-fra.com

Détection de AJAX requêtes sur NodeJS avec Express

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?

69
michael

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;
  ...
});
118
robertklep

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 ...

43
kumarharsh