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

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

カスタムなエラークラスを作成

エラーハンドリングでよく採用されるやり方があります。

一つの例ですが、自分たちのエラークラスを作成するやり方です。

なぜ、クラスを作成するかというとステータスコードだけでエラーの概要を伝えること

ができると便利だからです。

言葉だけでは難しいと思うので、シンプルなエラークラスを作成していきます。

 

・AppError.js

// extendsキーワードで継承して新しいクラスを作成
class AppError extends Error {
constructor(message, status) {
super();
this.message = message;
this.status = status;
}
}
module.exports = AppError;

〜継承を簡単に解説〜

・継承とは、クラスの構造や機能を引き継いだ新しいクラスを定義すること

・extendsキーワードを使って既存のクラスを継承した新しいクラスを定義できる

・継承されるクラスを親クラス、親クラスを継承するクラスを子クラスと呼ぶ

 

継承した子クラスで親クラスのコンストラクタ(初期化処理)を super() とすることで呼

び出せます。

また自分のプロパティとしてメッセージとステータスを設定しておきます。

これで簡単ではありますが、自分たちの情報を入れられるカスタムなエラークラスの作

成が完了です。

 

早速、これを使ってみます。

・index.js

const express = require('express');
const app = express();
const morgan = require('morgan');

const AppError = require('./AppError');

app.use(morgan('tiny'));
 
app.get('/admin', (req, res) => {
throw new AppError('管理者しかアクセスできません!', 403);
});
 
app.use((err, req, res, next) => {
const { status = 500, message = '何かエラーが起きました' } = err;
res.status(status).send(message);
});
 
app.listen(3000, () => {
console.log('locahost:3000で待受中...');
});

index.js で使うために、AppErrorを require しておきます。(下線部)

例えば管理者しかアクセスできないパスにアクセスしてしまったとします。

/admin のパスに行くと、、

AppErrorで設定した、メッセージとステータスコードがしっかりと表示されています。

自分たちで作成したエラークラスが問題なく継承されています。

メッセージ等を指定しなければ、

{ status = 500, message = '何かエラーが起きました' }

が表示されるようになっています。

ちなみに403エラー・・・

閲覧禁止を示すエラーメッセージです。

アクセスしているページはきちんと存在していますが、何らかの理由によりユーザーのアクセスが禁止されて

いるため、ページが見られないエラーです。