Как извлечь заголовки http запроса из запроса с помощью NodeJS connect


265

Я хотел бы получить заголовок "Host" запроса, сделанного с использованием пакета подключения библиотеки 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)метод, описанный в Справочнике по API Express 4.x.


177
Также с псевдонимом req.header(headerName).
ЗакБ

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

199

Чтобы увидеть список заголовков 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. В любом случае вы в конечном итоге ж / строка.
mikermcneil

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

1
Изложение очевидного здесь:headerValue = req.headers['headerName'];
asokan

1
Они просто документируют те свойства, которые не являются производными. В документации Express, упомянутой выше, есть примечание: «Объект req является расширенной версией собственного объекта запроса Node и поддерживает все встроенные поля и методы ». которая содержит ссылку, указывающую на документацию Node базового объекта.
Серж N

141

Проверьте вывод console.log(req)илиconsole.log(req.headers);


11
Как вы узнали о req.headers? В какой версии доступно это поле?
Алекс Сперлинг

11
@AlexSpurling nodejs.org/api/http.html#http_request_headers . Connect просто расширяет типы из модуля HTTP узла - http.ServerRequestи http.ServerResponse. Свойства или события, найденные в документации Node, также должны быть доступны в Connect (и, в дальнейшем, в Express).
Джонатан Лоновски

1
Это имеет больше смысла. Опять же, было бы хорошо узнать, где найти эту информацию (что тип req на самом деле http.ServerRequest). Документация не проясняет это.
Алекс Сперлинг

1
Тип запроса
Анатолий

Эта суть эмулирует запрос http и может быть полезна для вас: gist.github.com/3879071
Анатолий

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

Заголовки хранятся в объекте JavaScript со строками заголовка в качестве ключей объекта.

Аналогично, заголовок user-agent может быть получен с

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

3
ПРИМЕЧАНИЕ: указанное значение индекса FreakING !! дело чувствительное
Стив

9
Согласно комментарию @Steve о том, что он чувствителен к регистру, все заголовки в нижнем регистре. Таким образом, если вы устанавливаете заголовок «Origin» (заглавная «O»), то единственным элементом в коллекции заголовков запроса будет «origin» со строчной буквой «o».
ограбить
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.