Я використовую NodeJS з Express. Як я можу відрізнити звичайний запит браузера від запиту AJAX? Я знаю, що міг перевірити заголовки запитів, але чи надає Node / Exprsss цю інформацію?
Я використовую NodeJS з Express. Як я можу відрізнити звичайний запит браузера від запиту AJAX? Я знаю, що міг перевірити заголовки запитів, але чи надає Node / Exprsss цю інформацію?
Відповіді:
Більшість фреймворків встановлюють для X-Requested-With
заголовка значення XMLHttpRequest
, для якого Express має тест:
app.get('/path', function(req, res) {
var isAjaxRequest = req.xhr;
...
});
Якщо значення req.xhr
не встановлено, скажімо у таких фреймворках, як Angularjs, де його було видалено , тоді вам слід також перевірити, чи може заголовок прийняти відповідь JSON (або XML, або що інше, що ваш XHR надсилає як відповідь замість HTML).
if (req.xhr || req.headers.accept.indexOf('json') > -1) {
// send your xhr response here
} else {
// send your normal response here
}
Звичайно, вам доведеться трохи підправити другу частину, щоб вона відповідала вашому випадку використання, але це має бути більш повною відповіддю.
В ідеалі, команда з кутових не повинна була його видаляти, а насправді повинна була знайти краще рішення для передпольотної проблеми CORS, але ось як це тримається зараз ...
X-Requested-With
назад, $httpProvider
якщо ви залежате від цієї функціональності.
req.xhr
роботу з запитами AngularJS, додавши це до конфігурації кутового додатка: $httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';