2024-09-14
エラークラスを独自に実装したい場合, 次のように記載する.
class NotFoundError extends Error { constructor(message) { super(message); this.name = 'NotFoundError'; this.status = 404; } }
これをテストしてみよう. 上記コードで test.js というファイルを作成し, 最後に以下を記述する.
// ここに上記エラークラスを記載 throw new NotFoundError('カスタムエラークラスが呼び出されました');
実行する.
$ node test.js /home/oizumi/next-blog-app-backend/test.js:9 throw new NotFoundError('カスタムエラークラスが呼び出されました'); ^ NotFoundError: カスタムエラークラスが呼び出されました ...スタックトレースは省略... status: 404 }
ここで次の書き方は正しいだろうか.
class NotFoundError extends Error { constructor() { this.message = 'カスタムエラークラスが呼び出されました'; this.name = 'NotFoundError'; this.status = 404; } }
実行してみよう.
$ node test.js /home/oizumi/next-blog-app-backend/test.js:3 this.message = 'カスタムエラークラスが呼び出されました'; ^ ReferenceError: Must call super constructor in derived class before accessing 'this' or returning from derived constructor
super() を呼び出していないためにエラーが発生する. Error クラスを継承する際には親クラス (Error) のコンストラクタを呼び出すために, super() を使う必要がある.