駆け出しのエンジニア日記

プログラミング言語勉強中の奮闘日記

カスタムのエラーハンドラを作成する

実用的ではないですが、理解を深めるために簡単なカスタムエラーハンドラを作っていきます。

 

エラー処理ミドルウェア関数は、その他のミドルウェア関数と同じ方法で定義します。

エラー処理関数の引数は3つではなく、4つ (err、req、res、next) となります。

expressjs.com

 

これを踏まえて記述してみましょう。

const express = require('express');
const app = express();
const morgan = require('morgan');
app.use(morgan('tiny'));
 
app.get('/error', (req, res) => {
hoge.moge();
});

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」のエラーがレスポンスとして返ってきます。

あんまり意味がないエラーハンドラですが、自分が作成したエラーが確認でき、複数のエラーも呼ぶことも可能です。