Як витягнути заголовки http із запиту за допомогою NodeJS connect


265

Я хотів би отримати заголовок "Хост" запиту, зробленого за допомогою пакета підключення бібліотеки Node JS. Мій код виглядає так:

var app = connect()
  .use(connect.logger('dev'))
  .use(connect.static('public'))
  .use(function(req, res){

    var host = req.???

  })
 .listen(3000);

Документація для підключення знаходиться тут, але я не бачу нічого, що б деталізувало API reqоб'єкта у наведеному вище коді. http://www.senchalabs.org/connect/

Редагувати . Зауважте, що успішна відповідь повинна вказувати на документацію (мені це потрібно, щоб перевірити, яку версію надав API, який я шукаю).

Відповіді:


333

Якщо ви використовуєте Express 4.x, ви можете використовувати req.get(headerName)метод, як описано в Express 4.x API Reference


177
Також псевдонім з кращими названими req.header(headerName).
— ZachB

6
Не потрібно вводити Express для таких функціональних можливостей, як цей. Замість цього використовуйте нативно в NodeJS, як зазначено нижче. nodejs.org/uk/docs/guides/anatomy-of-an-http-transaction
— CodeFinity

198

Щоб переглянути список заголовків запитів HTTP, ви можете використовувати:

console.log(JSON.stringify(req.headers));

щоб повернути список у форматі JSON

{
"host":"localhost:8081",
"connection":"keep-alive",
"cache-control":"max-age=0",
"accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
"upgrade-insecure-requests":"1",
"user-agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.107 Safari/537.36",
"accept-encoding":"gzip, deflate, sdch",
"accept-language":"en-US,en;q=0.8,et;q=0.6"
}

2
Я вважаю це кориснішим, ніж прийнята відповідь вище. JSON.stringify має все значення.
— Патрік

1
Повністю - на відповідній примітці, ви також можете зробити: require('util').inspect(req.headers, {depth: null}якщо ви хочете еквівалент того, що ви отримали б у вузлі REPL. У будь-якому випадку ви закінчите w / string.
— mikermcneil

4
Чому не req.headersвключений в офіційну документацію Express? expressjs.com/en/api.html#req
— user1063287

1
Заявляючи тут очевидне:headerValue = req.headers['headerName'];
— asokan

1
Вони просто документують ті властивості, які не є похідними. У згаданій вище документації Express є примітка: "Об'єкт req - це розширена версія власного об'єкта запиту Node і підтримує всі вбудовані поля та методи ." що містить посилання, що вказує на документацію вузла базового об'єкта.
— Серж N

141

Перевірте вихід console.log(req)абоconsole.log(req.headers);


11
Як ви дізналися про req.headers? У якій версії це поле доступне?
— Alex Spurling

11
@AlexSpurling nodejs.org/api/http.html#http_request_headers . Підключення просто розширює типи з HTTP-модуля Node - http.ServerRequestі http.ServerResponse. Властивості або події, знайдені в документації Node, також повинні бути доступні в Connect (і, шляхом подальшого розширення, Express).
— Джонатан Лоновський

1
Це має більше сенсу. Знову-таки, було б добре знати, де знайти цю інформацію (що тип req насправді http.ServerRequest). Документація не видає цього зрозумілим.
— Alex Spurling

1
Тип запиту
— Анатолій

Цей gist наслідує запит http, і він може бути вам корисним: gist.github.com/3879071
— Анатолій

56
var host = req.headers['host']; 

Заголовки зберігаються в об’єкті JavaScript, а рядки заголовка - як об'єктні клавіші.

Аналогічно, заголовок користувача-агента можна отримати за допомогою

var userAgent = req.headers['user-agent']; 

3
ПРИМІТКА: назване значення індексу FreakING !! справа чутлива
— Стів

9
Відповідно до коментаря @Steve про те, що він відрізняється від регістру, всі заголовки мають нижній регістр. Отже, якщо ви встановлюєте заголовок "Походження" (з великої літери "О"), то єдиним елементом колекції заголовків запиту буде "походження" з малим "о".
— пограбувати
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.