NodeJS接続を使用してリクエストからリクエストHTTPヘッダーを抽出する方法


265

Node JSの接続ライブラリバンドルを使用して行われたリクエストの「ホスト」ヘッダーを取得したいのですが。私のコードは次のようになります:

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

    var host = req.???

  })
 .listen(3000);

接続のドキュメントはここにありreqますが、上記のコードにオブジェクトのAPIの詳細は表示されません。http://www.senchalabs.org/connect/

編集:成功した回答はドキュメントを指す必要があることに注意してください(探しているAPIを提供したバージョンを確認するためにこれが必要です)。

回答:


333

Express 4.xを使用する場合req.get(headerName)は、Express 4.x APIリファレンスで説明されている方法を使用できます。


177
より良い名前の別名も付けられreq.header(headerName)ます。
— ZachB '19

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はすべての違いをもたらします。
— Patrick

1
完全に関連するノートでは、次のことも実行できrequire('util').inspect(req.headers, {depth: null}ます。ノードREPLで取得するものと同等のものが必要な場合。どちらの方法でも、文字列で終わります。
— mikermcneil 2015

4
req.headersExpressの公式ドキュメントに含まれていないのはなぜですか? expressjs.com/en/api.html#req
— user1063287

1
ここで明白なことを述べる:headerValue = req.headers['headerName'];
— asokan '21

1
派生していないプロパティのみを文書化します。上記のExpressのドキュメントには、「reqオブジェクトはNode自身のリクエストオブジェクトの拡張バージョンであり、すべての組み込みフィールドとメソッドをサポートする」という注記があります。これには、基になるオブジェクトのノードドキュメントを指すリンクが含まれます。
— Serge N

141

console.log(req)またはの出力を確認しますconsole.log(req.headers);


11
req.headersをどのようにして知りましたか?このフィールドはどのバージョンで利用できますか?
— Alex Spurling 2012年

11
@AlexSpurling nodejs.org/api/http.html#http_request_headers。Connectは、NodeのHTTPモジュールから型を拡張するだけです - http.ServerRequestおよびhttp.ServerResponse。Nodeのドキュメントにあるプロパティまたはイベントは、Connect(さらにはExpress)でも利用できます。
— ジョナサンロノウスキー

1
それはもっと理にかなっています。繰り返しになりますが、その情報がどこにあるのか(reqのタイプが実際にはhttp.ServerRequestであること)を知っているとよいでしょう。ドキュメントはこれを明確にしていないようです。
— Alex Spurling 2012年

1
要求のタイプはhttp.IncomingMessageです
— Anatoliy

この要旨はhttpリクエストをエミュレートし、あなたに役立つかもしれません:gist.github.com/3879071
— Anatoliy

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

ヘッダーはJavaScriptオブジェクトに保存され、ヘッダー文字列はオブジェクトキーとして使用されます。

同様に、ユーザーエージェントヘッダーは

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

3
注:名前付きインデックス値はフリークです!! 大文字と小文字を区別
— Steve

9
@Steveコメントによると、大文字と小文字が区別されるため、すべてのヘッダーは小文字になります。したがって、ヘッダー「Origin」(大文字の「O」)を設定している場合、リクエストヘッダーコレクションの唯一の要素は、小文字の「o」が付いた「origin」になります。
— rob
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.