Home
Blog
Products
Profile
Study
Collatz
© 2024 Oizumi Yuta

Node.js カスタムエラークラス

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() を使う必要がある.