レスポンス送信をマスターしよう!Node.js Expressでres.end()とres.send()を使いこなす
Node.js Expressにおける res.end() と res.send() の違い
この二つの関数はどちらもレスポンス送信に用いられますが、いくつかの重要な違いがあります。
処理のタイミング
res.end()
: レスポンスヘッダーとボディを全て送信し、クライアントとの接続を閉じます。res.send()
: レスポンスヘッダーとボディを設定し、res.end()
を自動的に呼び出します。
つまり、res.end()
は直接接続を閉じる一方、res.send()
は内部的に res.end()
を呼び出すため、後者の方が処理がシンプルになります。
データの種類
res.end()
: 文字列、バッファ、オブジェクトなど、様々な種類のデータを扱えます。res.send()
: 文字列、オブジェクト、JSON、HTML などのデータ形式を自動的に変換して送信します。
res.end()
はより柔軟性がありますが、データ形式を意識する必要があり、複雑な処理になる場合があります。一方、res.send()
は多くのデータ形式を自動変換してくれるため、コードをシンプルに保てます。
ステータスコード
res.end()
: デフォルトのステータスコードは 200 OK です。
res.end()
はステータスコードの設定ができませんが、res.send()
は引数で設定できるため、より柔軟なエラー処理やリダイレクトなどが可能です。
使用例
res.end()
: ファイルストリームや画像データなど、バイナリデータを直接送信する場合に適しています。res.send()
: JSON データや HTML テンプレートなど、テキストデータを自動変換して送信する場合に適しています。
res.end()
と res.send()
はそれぞれ異なる役割を持ち、状況に応じて使い分けることが重要です。
- 処理をシンプルにしたい場合は
res.send()
を使用します。 - バイナリデータなど、特殊なデータ形式を送信する場合は
res.end()
を使用します。
これらの違いを理解することで、より効率的で分かりやすいコードを書くことができます。
res.end() のサンプル
const express = require('express');
const app = express();
app.get('/', (req, res) => {
const data = new Buffer('Hello, World!');
res.end(data);
});
app.listen(3000);
このコードは、/
エンドポイントにアクセスすると、Hello, World!
という文字列をバイナリデータとして送信します。
const express = require('express');
const app = express();
app.get('/', (req, res) => {
const data = {
message: 'Hello, World!'
};
res.send(data);
});
app.listen(3000);
上記のサンプルコードを参考に、状況に応じて res.end()
と res.send()
を使い分けてください。
レスポンス送信のその他の方法
res.write()
は、レスポンスボディにデータを逐次書き込む方法です。
const express = require('express');
const app = express();
app.get('/', (req, res) => {
for (let i = 0; i < 10; i++) {
res.write(`Hello, World! ${i}\n`);
}
res.end();
});
app.listen(3000);
res.json()
は、オブジェクトを JSON 形式に変換して送信する方法です。
const express = require('express');
const app = express();
app.get('/', (req, res) => {
const data = {
message: 'Hello, World!'
};
res.json(data);
});
app.listen(3000);
res.redirect()
は、クライアントを別の URL にリダイレクトする方法です。
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.redirect('/about');
});
app.get('/about', (req, res) => {
res.send('About Page');
});
app.listen(3000);
このコードは、/
エンドポイントにアクセスすると、/about
エンドポイントにリダイレクトします。
res.sendFile()
は、ファイルをクライアントに送信する方法です。
const express = require('express');
const app = express();
app.get('/image.png', (req, res) => {
res.sendFile('image.png');
});
app.listen(3000);
このコードは、/image.png
エンドポイントにアクセスすると、image.png
ファイルをクライアントに送信します。
これらの方法を使いこなすことで、より柔軟なレスポンス処理が可能になります。
node.js express