Expressでresオブジェクトを使用する方法
序章
この記事では、Expressのres
オブジェクトについて学習します。 response
の略で、res
オブジェクトは、HTTPを介してサーバーからクライアント側にデータを送信するrequestおよびresponse
サイクルの半分です。リクエスト。
前提条件
-
Node.jsを理解することは役に立ちますが、必須ではありません。 Node.jsの詳細については、Node.jsシリーズのコーディング方法をご覧ください。
-
HTTPリクエストの一般的な知識。 HTTPリクエストの詳細については、ExpressでルートとHTTPリクエストメソッドを定義する方法に関するチュートリアルをご覧ください。
.status()
および.append()
メソッドの調査
res
オブジェクトの.send()
メソッドは、引数として渡されたデータをクライアント側に転送します。 このメソッドは、文字列、配列、およびオブジェクトを引数として取ることができます。
index.js
ファイルで、ルート'/home'
を使用してGET
リクエストを実装します。
app.get('/home', (req, res) => {
res.send('Hello World!'))
});
GET
リクエストは、req
とres
を引数としてコールバック引数を取ることに注意してください。 GET
リクエスト内のres
オブジェクトを使用して、文字列Hello World!
をクライアント側に送信できます。
.send()
メソッドは、データのContent-Type
およびContent-Length
に応じて、独自の組み込みヘッダーもネイティブに定義します。
res
オブジェクトは、.status()
メソッドを使用してHTTPステータスコードを指定することもできます。 index.js
ファイルで、.status()
メソッドをres
オブジェクトに統合し、引数としてHTTPステータスコードを渡します。
res.status(404).send('Not Found');
res
オブジェクトの.status()
メソッドは、404
のHTTPステータスコードを設定します。 ステータスコードをクライアント側に送信するには、.send()
メソッドを使用してメソッドチェーンを実行できます。 ステータスコード404
は、要求されたデータが見つからないことをクライアント側に通知します。
.sendStatus()
メソッドは、.status()
メソッドと.send()
メソッドの両方の機能を適応させるための省略構文です。
res.sendStatus(404);
ここで、.sendStatus()
メソッドはHTTPステータスコード404
を設定し、1回の呼び出しでクライアント側に送信します。
HTTPステータスコードは、Expressサーバーの応答を要約します。 ブラウザはHTTPステータスコードに依存して、指定されたデータが存在するかどうか、または内部サーバーエラーが発生したかどうかをクライアント側に通知します。
サーバー応答でヘッダーを定義するには、.append()
メソッドを適用します。 index.js
ファイルで、.append()
の呼び出しの最初の引数としてヘッダーを渡し、2番目の引数として値を渡します。
res.append('Content-Type', 'application/javascript; charset=UTF-8');
res.append('Connection', 'keep-alive')
res.append('Set-Cookie', 'divehours=fornightly')
res.append('Content-Length', '5089990');
1行のコードで、.append()
メソッドは、サーバー応答で標準ヘッダーと非標準ヘッダーを受け入れます。
.redirect()
、.render()
、および.end()
メソッドの分析
res
オブジェクトのredirect()
メソッドは、クライアント側を別のページに誘導します。 ユーザーがクライアント側でログイン資格情報を入力した場合、.redirect()
メソッドを使用すると、アクセスページへの切り替えが容易になります。
index.js
ファイルで、res
オブジェクトに.redirect()
メソッドを設定します。
res.redirect('/sharks/shark-facts')
ここで、.redirect()
メソッドは、クライアント側をルート'/sharks/shark-facts'
に転送します。
.render()
メソッドは、引数としてHTMLファイルを受け取り、それをクライアント側に送信します。 このメソッドは、クライアント側に送信されるファイルを定義するためのカスタムプロパティを持つ、オプションの2番目の引数であるlocalsオブジェクトも受け入れます。
index.js
ファイルで、ルート'/shark-game'
を使用してGET
リクエストを実装します。
[label index.js]
app.get('/shark-game', (req, res) => {
res.render('shark.html', {status: 'good'});
});
res
オブジェクトで.render()
メソッドを使用すると、HTMLファイルshark.html
とstatus
プロパティを持つローカルオブジェクトがクライアント側に送信されます。
.end()
メソッドは、応答サイクルを終了します。 クライアント側への応答の最後の呼び出しとして、.end()
メソッドを使用することをお勧めします。
index.js
ファイルで、.end()
とチェーンされた.sentStatus()
メソッドを設定します。
res.sendStatus(404).end();
.end()
メソッドは、HTTPステータスコード404
が設定されてクライアント側に送信されると、応答を完了します。
req
オブジェクトは、データ転送だけでなく、ファイルの転送も容易にします。 req
オブジェクトに含まれるファイル管理用の他のメソッドを見てみましょう。
res
オブジェクトを使用したファイルの処理
HTML、CSS、およびJavaScriptファイルをクライアント側に送信するには、res
オブジェクトで.sendFile()
メソッドを使用します。 index.js
ファイルで、GET
リクエストをルート'/gallery/:fileName'
に設定します。
// GET https://sharks.com/gallery/shark-image.jpg
app.get('/gallery/:fileName', function (req, res, next) {
var options = {
root: path.join(__dirname, 'public')
};
res.sendFile(req.params.fileName, options, function (err) {
if (err) next(err);
else console.log('Sent:', fileName);
});
});
GET
要求内で、変数options
は、オブジェクトとpublic
ディレクトリを、絶対パスとして機能するpath.join()
の呼び出しの値として受け取ります。 public
ディレクトリのコンテンツには、HTML、CSS、およびJavaScriptファイルが含まれます。 .sendFile
メソッドの呼び出しは、options
変数を2番目の引数として受け取り、エラーハンドラーを3番目の引数として設定します。 これにより、public
ディレクトリに保存されているファイルがクライアント側に送信されます。
res
オブジェクトの.download()
メソッドを使用してファイル処理を容易にすることもできます。 index.js
ファイルで、ルート'/gallery/:fileName'
へのGET
リクエストを実装します。
[label index.js]
// GET https://sharkss.com/gallery/shark-image.jpg
app.get('/gallery/:fileName', function(req, res){
const file = `${__dirname}/public/${req.params.fileName}`;
res.download(file);
});
.download()
メソッドは、クライアント側にファイルをダウンロードするように送信およびプロンプトを表示し、1回の呼び出しでファイルタイプに適切なヘッダーを設定します。
ファイルタイプのContent-Header
の値の概要を説明するには、res
オブジェクトの.type()
メソッドを使用します。 index.js
ファイルで、.type()
メソッドをres
オブジェクトに設定し、ファイルタイプを引数として渡します。
res.type('png') // => 'image/png'
res.type('html') // => 'text/html'
res.type('application/json') // =>'application/json'
.type()
メソッドは、ファイルタイプとそれに関連する値をContent-Header
に出力します。
結論
res
オブジェクトは、Expressサーバーからクライアント側へのresponse
サイクルの一部として、データとファイルの転送を容易にするメソッドを保持します。 res
オブジェクトに関する包括的な情報を入手するには、Express.jsの公式ドキュメントのWebサイトにアクセスしてください。