Menu
CoddyTech

エラーレスポンス

CoddyのNode.jsジャーニー「Expressの基礎」セクションの一部。レッスン 17/23。

サーバー上で何か問題が起きると、ルートの処理に失敗することがあります。Errorをスローすると、その失敗がExpressに渡されます。エラーハンドラーは、最初の引数がerrである4つの引数を取るミドルウェアです。Expressは、スローされたエラーをこの種類のミドルウェアに渡します。

app.use((err, req, res, next) => {
    res.status(500).json({error: 'Try later'});
});

ハンドラーはルートの後に配置します。クライアントには短いメッセージを返し、サーバーでは詳細を記録できます。nextを使わない場合も、4つの引数すべてを残してください。Expressは関数の形を使ってエラーハンドラーを判別します。

ハンドラーを追加する前は、GET /brokenはExpress独自のHTMLエラーページを返します。next(err)を呼び出すとエラーもエラーハンドラーに渡されますが、next()を呼び出すと通常どおり処理が続行されます。

challenge icon

チャレンジ

簡単

Run では practice-errors/server.js のみを実行します。Recipe Box のファイルには手を加えず、次のレッスンで続きを行います。

GET /broken を送信して、デフォルトのエラーページを確認します。ルートの後にエラーハンドラーを追加します。err.message を console.error でログに記録し、その後ステータス 500 と {"error":"Try later"} を返します。レスポンスに Database offline を含めてはいけませんが、Console には表示される必要があります。

エラーを投げるルートは、ロックされている practice-errors/routes.js にあります。マウント設定はそのままにし、ハンドラーは server.js に記述します。

自分で試してみよう

import routes from './routes.js';
import express from 'express';
const app = express();
app.use(routes);
// ここにエラーハンドラーを追加してください。
app.listen(3000);

Expressの基礎のすべてのレッスン

自分で練習してみよう: Expressプレイグラウンド