Expressでreqオブジェクトを使用する方法
序章
request
の略で、req
オブジェクトは、requestおよびresponseサイクルの半分であり、クライアント側からの呼び出しを調べ、HTTP要求を行います。文字列またはJSONオブジェクトのいずれかで受信データを処理します。
この記事では、Expressのreq
オブジェクトについて学習します。
前提条件
この記事をフォローするには、次のものが必要です。
クライアント側のデータの管理
Expressサーバーは、req.params
、req.query
、およびreq.body
オブジェクトの3つのインスタンスで、req
オブジェクトを介してクライアント側からデータを受信します。
req.params
オブジェクトは、URLで指定されたパラメーターに基づいてデータをキャプチャします。 index.js
ファイルで、'/:userid'
のパラメーターを使用してGET
リクエストを実装します。
// GET https://example.com/user/1
app.get('/:userid', (req, res) => {
console.log(req.params.userid) // "1"
})
req.params
オブジェクトは、パラメーター'/:userid'
を介してユーザーのIDの結果を出力するようにExpressに指示します。 ここで、指定されたパラメーターを使用したhttps://example.com/user/1
へのGET
要求は、"1"
のIDでコンソールにログインします。
URLクエリ文字列にアクセスするには、req.query
オブジェクトを適用して、データの検索、フィルタリング、および並べ替えを行います。 index.js
ファイルに、ルート'/search'
へのGET
リクエストを含めます。
// GET https://example.com/search?keyword=great-white
app.get('/search', (req, res) => {
console.log(req.query.keyword) // "great-white"
})
req.query
オブジェクトを利用すると、条件付きクエリでクライアント側からロードされたデータと一致します。 この場合、'/search'
ルートへのGET
要求は、検索クエリのキーワードをhttps://example.com
に一致させるようにExpressに通知します。 .keyword
プロパティをreq.query
オブジェクトに追加した結果は、コンソール"great-white"
にログインします。
req.body
オブジェクトを使用すると、クライアント側から文字列またはJSONオブジェクトのデータにアクセスできます。 通常、req.body
オブジェクトを使用して、ExpressサーバーのPOST
およびPUT
要求を介してデータを受信します。
index.js
ファイルで、POST
リクエストをルート'/login'
に設定します。
// POST https://example.com/login
//
// {
// "email": "[email protected]",
// "password": "helloworld"
// }
app.post('/login', (req, res) => {
console.log(req.body.email) // "[email protected]"
console.log(req.body.password) // "helloworld"
})
ユーザーがクライアント側で電子メールとパスワードを入力すると、req.body
オブジェクトはその情報を保存し、Expressサーバーに送信します。 req.body
オブジェクトをコンソールにログインすると、ユーザーの電子メールとパスワードが表示されます。
req
オブジェクトを実装する方法を検討したので、Expressサーバーに統合する他のアプローチを見てみましょう。
req
プロパティを使用したURLの調査
req
オブジェクトのプロパティは、構造に基づいてURLの一部を返すこともできます。 これには、protocol
、hostname
、path
、originalUrl
、およびsubdomains
が含まれます。
index.js
ファイルで、GET
リクエストを'/creatures'
ルートに設定します。
// https://ocean.example.com/creatures?filter=sharks
app.get('/creatures', (req, res) => {
console.log(req.protocol) // "https"
console.log(req.hostname) // "example.com"
console.log(req.path) // "/creatures"
console.log(req.originalUrl) // "/creatures?filter=sharks"
console.log(req.subdomains) // "['ocean']"
})
.protocol
や.hostname
などの組み込みプロパティを使用して、URLのさまざまな部分にアクセスできます。 req
オブジェクトを各プロパティとともにログに記録すると、URLの構造がわかります。
追加のreq
プロパティの分析
res
オブジェクトは、HTTPリクエストへの呼び出しを最大化するためのプロパティで構成されています。
GET
、POST
、PUT
、DELETE
のいずれであっても、HTTPメソッドにアクセスするには、.method
プロパティをreq
オブジェクト。 index.js
ファイルで、匿名エンドポイントへのDELETE
リクエストを実装します。
app.delete('/', (req, res) => {
console.log(req.method) // "DELETE"
})
.method
プロパティは、現在のHTTPリクエストメソッドを返します。 この場合、コンソールはDELETE
メソッドをログに記録します。
サーバーに送信されるヘッダーの場合は、メソッド.header()
をreq
オブジェクトに追加します。 POST
リクエストをindex.js
ファイルのルート'/login'
に設定します。
app.post('/login', (req, res) => {
req.header('Content-Type') // "application/json"
req.header('user-agent') // "Mozilla/5.0 (Macintosh Intel Mac OS X 10_8_5) AppleWebKi..."
req.header('Authorization') // "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..."
})
req.header()
メソッドは、Content-Type
やAuthorization
などのヘッダータイプを返します。 req.header()
の引数では大文字と小文字が区別されないため、req.header('Content-Type')
とreq.header('content-type')
を同じ意味で使用できます。
Expressサーバーの依存関係としてcookie-parserを追加した場合、req.cookies
プロパティはパーサーからの値を格納します。 index.js
ファイルで、req.cookies
のインスタンスを設定し、sessionDate
プロパティを適用します。
// Cookie sessionDate=2019-05-28T01:49:11.968Z
req.cookies.sessionDate // "2019-05-28T01:49:11.968Z"
req
オブジェクトから呼び出されたときに、Cookieのセッション日付から返される結果に注意してください。
結論
Expressは、req
オブジェクトをrequest
サイクルの一部として利用して、クライアント側からのHTTP要求とデータを処理するための組み込みプロパティを提供します。 req
の公式ドキュメントを表示する場合は、公式Express.jsドキュメントにアクセスしてください。