カスタムのエラーハンドラを作成する
実用的ではないですが、理解を深めるために簡単なカスタムエラーハンドラを作っていきます。
エラー処理ミドルウェア関数は、その他のミドルウェア関数と同じ方法で定義します。
エラー処理関数の引数は3つではなく、4つ (err、req、res、next) となります。
これを踏まえて記述してみましょう。
const express = require('express');
const app = express();
const morgan = require('morgan');
app.use(morgan('tiny'));
app.use((err, req, res, next) => {
console.log('********************************');
console.log('**************エラー**************');
console.log('********************************');
});
app.listen(3000, () => {
console.log('locahost:3000で待受中...');
});
太字の部分ですね。
ここで、「error」のパスに行くと、レスポンスが返ってこなくなり、
ログも確認取れます。
自分たちが作成したエラーハンドラが実行されていることになります。
ここで、
res.status(500).send('エラーが発生しました!!!');
を追加します。
問題なく返ってきています。
エラー用のミドルウェアを呼びたいのであれば、「err」を渡す必要があります。
next(err);
まとめるとこのようになります。
app.use((err, req, res, next) => {
console.log('********************************');
console.log('**************エラー**************');
console.log('********************************');
console.log(err);
next(err);
});
・ログ上・・・コンソールの中身も確認できています。
・画面上・・・上記で設定した「hoge」のエラーがレスポンスとして返ってきます。
あんまり意味がないエラーハンドラですが、自分が作成したエラーが確認でき、複数のエラーも呼ぶことも可能です。