序章

この記事では、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リクエストを実装します。

index.js
app.get('/home', (req, res) => {
  res.send('Hello World!'))
});

GETリクエストは、reqresを引数としてコールバック引数を取ることに注意してください。 GETリクエスト内のresオブジェクトを使用して、文字列Hello World!をクライアント側に送信できます。

.send()メソッドは、データのContent-TypeおよびContent-Lengthに応じて、独自の組み込みヘッダーもネイティブに定義します。

resオブジェクトは、.status()メソッドを使用してHTTPステータスコードを指定することもできます。 index.jsファイルで、.status()メソッドをresオブジェクトに統合し、引数としてHTTPステータスコードを渡します。

index.js
res.status(404).send('Not Found');

resオブジェクトの.status()メソッドは、404のHTTPステータスコードを設定します。 ステータスコードをクライアント側に送信するには、.send()メソッドを使用してメソッドチェーンを実行できます。 ステータスコード404は、要求されたデータが見つからないことをクライアント側に通知します。

.sendStatus()メソッドは、.status()メソッドと.send()メソッドの両方の機能を適応させるための省略構文です。

index.js
res.sendStatus(404);

ここで、.sendStatus()メソッドはHTTPステータスコード404を設定し、1回の呼び出しでクライアント側に送信します。

HTTPステータスコードは、Expressサーバーの応答を要約します。 ブラウザはHTTPステータスコードに依存して、指定されたデータが存在するかどうか、または内部サーバーエラーが発生したかどうかをクライアント側に通知します。

サーバー応答でヘッダーを定義するには、.append()メソッドを適用します。 index.jsファイルで、.append()の呼び出しの最初の引数としてヘッダーを渡し、2番目の引数として値を渡します。

index.js
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()メソッドを設定します。

index.js
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.htmlstatusプロパティを持つローカルオブジェクトがクライアント側に送信されます。

.end()メソッドは、応答サイクルを終了します。 クライアント側への応答の最後の呼び出しとして、.end()メソッドを使用することをお勧めします。

index.jsファイルで、.end()とチェーンされた.sentStatus()メソッドを設定します。

index.js
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オブジェクトに設定し、ファイルタイプを引数として渡します。

index.js
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サイトにアクセスしてください。