req.get()
| 対応: | Express 4(2014) |
|---|
『Express』の req.get() は、リクエストに含まれる指定したHTTPヘッダーの値を取得するメソッドです。ヘッダー名の大文字・小文字は区別されません。指定したヘッダーが存在しない場合は undefined が返されます。
構文
req.get(field)
引数一覧
| 引数 | 型 | 概要 |
|---|---|---|
| field | 文字列 | 取得したいHTTPヘッダーのフィールド名を指定します。大文字・小文字の区別はありません。 |
戻り値
| 値 | 型 | 概要 |
|---|---|---|
| ヘッダーの値 | 文字列 | 指定したフィールドに対応するヘッダー値を文字列で返します。 |
| undefined | - | 指定したフィールドがリクエストヘッダーに存在しない場合に返されます。 |
サンプルコード
よく使われるリクエストヘッダーの取得方法と、その活用例を紹介します。
Content-Type ヘッダーの取得
var express = require('express');
var app = express();
app.post('/upload', function(req, res) {
var contentType = req.get('Content-Type');
console.log('Content-Type:', contentType);
res.send('受け取ったContent-Type: ' + contentType);
});
Content-Type: application/json
Authorization ヘッダーによるBearerトークン認証
app.get('/api/profile', function(req, res) {
var authHeader = req.get('Authorization');
if (!authHeader) {
return res.status(401).json({ error: '認証情報がありません' });
}
var token = authHeader.replace('Bearer ', '');
console.log('受け取ったトークン:', token);
res.json({ message: '認証に成功しました', token: token });
});
受け取ったトークン: eyJhbGciOiJIUzI1NiJ9...
Accept ヘッダーに応じてレスポンス形式を切り替える
app.get('/data', function(req, res) {
var acceptHeader = req.get('Accept');
var data = { name: 'Express辞典', version: '4.x' };
if (acceptHeader && acceptHeader.indexOf('application/json') !== -1) {
res.json(data);
} else {
res.send(data.name + ' v' + data.version);
}
});
{ "name": "Express辞典", "version": "4.x" }
存在しないヘッダーを取得した場合の確認
app.get('/check', function(req, res) {
var missingHeader = req.get('X-Nonexistent-Header');
console.log('存在しないヘッダーの値:', missingHeader);
var value = missingHeader || '(ヘッダーなし)';
res.send('ヘッダーの値: ' + value);
});
app.listen(3000, function() {
console.log('サーバーを起動しました: http://localhost:3000');
});
存在しないヘッダーの値: undefined ヘッダーの値: (ヘッダーなし)
概要
req.get() はHTTPリクエストヘッダーを取得する最も基本的なメソッドです。req.get('Content-Type') と req.get('content-type') はどちらも同じ値を返すため、ヘッダー名の大文字・小文字を意識せずに使用できます。
指定したヘッダーがリクエストに含まれていない場合は undefined が返されます。そのため、返された値に対して文字列操作を行う前には if (!value) や value || '既定値' のように存在確認を行うと安全です。
Content-Type ヘッダーに限り req.get('Content-Type') の別名として req.is() を使うと、より簡潔にコンテンツタイプを判定できます。また、すべてのリクエストヘッダーをオブジェクト形式で参照したい場合は req.headers を使用できます。クライアントのIPアドレスを取得したい場合は req.ip が利用できます。
よくあるミス
ミス1: undefined のまま文字列操作をしてしまう
ヘッダーが存在しない場合 undefined が返されます。存在確認なしに .replace() などを呼ぶとエラーになります。
NG: undefined への文字列操作
app.get('/api/data', function(req, res) {
var authHeader = req.get('Authorization');
var token = authHeader.replace('Bearer ', '');
res.json({ token: token });
});
TypeError: Cannot read properties of undefined (reading 'replace')
OK: undefined への文字列操作
app.get('/api/data', function(req, res) {
var authHeader = req.get('Authorization');
if (!authHeader) {
return res.status(401).json({ error: '認証情報がありません' });
}
var token = authHeader.replace('Bearer ', '');
res.json({ token: token });
});
ミス2: req.headers と混同してしまう
req.get('Content-Type') と req.headers['content-type'] は同じ値を返しますが、req.headers のキーはすべて小文字です。req.headers['Content-Type'] のように大文字を含むキーでアクセスすると undefined になります。
NG: req.headers の大文字キー
app.post('/upload', function(req, res) {
var contentType = req.headers['Content-Type'];
console.log(contentType);
});
undefined
OK: req.get を使う場合
app.post('/upload', function(req, res) {
var contentType = req.get('Content-Type');
console.log(contentType);
});
application/json
OK: req.headers を使う場合は小文字で指定
app.post('/upload', function(req, res) {
var contentType = req.headers['content-type'];
console.log(contentType);
});
application/json
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。