Node.jsでのエラー処理

Node.jsアプリケーションの実行中にエラーを処理する方法

Node.jsのエラーは、例外によって処理されます。

例外の作成

例外は、を使用して作成されますthrowキーワード:

throw value

JavaScriptがこの行を実行するとすぐに、通常のプログラムフローが停止し、制御が最も近いものに保持されます。例外ハンドラ

通常、クライアント側のコードでvalue文字列、数値、またはオブジェクトを含む任意のJavaScript値にすることができます。

Node.jsでは、文字列をスローするのではなく、Errorオブジェクトをスローするだけです。

エラーオブジェクト

エラーオブジェクトは、Errorオブジェクトのインスタンスであるか、Errorクラスを拡張するオブジェクトです。エラーコアモジュール

throw new Error('Ran out of coffee')

または

class NotEnoughCoffeeError extends Error {
  //...
}
throw new NotEnoughCoffeeError

例外の処理

例外ハンドラはtry/catchステートメント。

に含まれるコード行で発生した例外tryブロックは対応するで処理されますcatchブロック:

try {
  //lines of code
} catch (e) {

}

eこの例では、例外値です。

さまざまな種類のエラーをキャッチできる複数のハンドラーを追加できます。

キャッチされない例外をキャッチする

プログラムの実行中にキャッチされない例外がスローされると、プログラムがクラッシュします。

これを解決するために、あなたはuncaughtExceptionのイベントprocessオブジェクト:

process.on('uncaughtException', (err) => {
    console.error('There was an uncaught error', err)
    process.exit(1) //mandatory (as per the Node docs)
})

をインポートする必要はありませんprocess自動的に注入されるため、このためのコアモジュール。

約束のある例外

promiseを使用すると、さまざまな操作を連鎖させ、最後にエラーを処理できます。

doSomething1()
  .then(doSomething2())
  .then(doSomething3())
  .catch(err => console.error(err))

エラーが発生した場所をどのようにして知ることができますか?よくわかりませんが、呼び出す各関数のエラーを処理できます(doSomethingX)、エラーハンドラーの内部で新しいエラーがスローされ、外部が呼び出されますcatchハンドラ:

const doSomething1 = () => {
  //...
  try {
    //...
  } catch (err) {
    //... handle it locally
    throw new Error(err.message)
  }
  //...
}

呼び出す関数でエラーを処理せずにローカルでエラーを処理できるようにするために、それぞれに関数を作成できるチェーンを壊すことができますthen()例外を処理します。

doSomething1
  .then((() => {
    return doSomething2().catch(err => {
      //handle error
      throw err //break the chain!
    })
  })
  .then((() => {
    return doSomething2().catch(err => {
      //handle error
      throw err //break the chain!
    })
  })
  .catch(err => console.error(err))

async / awaitでのエラー処理

async / awaitを使用しても、エラーをキャッチする必要があり、次のようにします。

async function someFunction() {
  try {
    await someOtherFunction()
  }
  catch (err) {
    console.error(err.message)
  }
}

私の無料ダウンロードNode.jsハンドブック


その他のノードチュートリアル: