JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

Node.jsのassert.ifError()関数の使い方を徹底解説

Node.jsのassertモジュールは、関数のアサーション(値の検証)に使用できるさまざまな機能を提供しています。その中でもassert.ifError()関数は、渡された値がnullまたはundefinedでない場合にエラーをスローする機能を持っています。つまり、この2つの値以外が渡された場合には、すべてエラーが発生します。

構文

assert.ifError(value)

パラメータ

  • value – エラーがないかチェック対象となる値を指定します。nullまたはundefined以外の値が渡された場合、すべてエラーがスローされます。

assertモジュールのインストール

npm install assert

assertモジュールはNode.jsに組み込まれているモジュールなので、この手順は省略しても問題ありません。最新バージョンのassertモジュールを使用したい場合は、以下のコマンドでバージョンを確認できます。

npm version assert

関数内でのモジュールの読み込み

const assert = require("assert").strict;

使用例1: エラーがスローされるケース

まず、assertIfError.jsという名前のファイルを作成し、以下のコードをコピーしてください。ファイル作成後、次のコマンドでコードを実行します。

node assertIfError.js

assertIfError.js

// モジュールの読み込み
const assert = require('assert').strict;

try {
    assert.ifError('6');
// エラーがスローされる: value: 6
} catch(error) {
    console.log("Error:", error)
}

出力結果

C:\home\node>> node assertIfError.js
Error: { AssertionError [ERR_ASSERTION]: ifError got unwanted exception: '6'
    at Object. (/home/node/mysql-test/assert.js:5:9)
    at Module._compile (internal/modules/cjs/loader.js:778:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:831:12)
    at startup (internal/bootstrap/node.js:283:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:623:3)
generatedMessage: false,
name: 'AssertionError [ERR_ASSERTION]',
code: 'ERR_ASSERTION',
actual: '6',
expected: null,
operator: 'ifError' }

上記の例では、渡された値が文字列の'6'であり、nullでもundefinedでもないため、AssertionError [ERR_ASSERTION]がスローされていることがわかります。

使用例2: エラーがスローされないケース

続いて、別の例を見てみましょう。

// モジュールの読み込み
const assert = require('assert').strict;

try {
    assert.ifError(null);
    console.log("No Error occured")
    assert.ifError(undefined);
    console.log("OK")
    // nullとundefinedは有効な値として扱われる
} catch(error) {
    console.log("Error:", error)
}

出力結果

C:\home\node>> node assertIfError.js
No Error occured
OK

この例では、値としてnullundefinedを渡していますが、これらはifErrorにとって有効な値であるため、エラーはスローされず、処理がそのまま続行されます。

まとめ

assert.ifError()は、主にコールバック関数の第1引数(エラーオブジェクト)を検証する際などに活用される便利な関数です。値がnullまたはundefinedの場合のみ正常に処理され、それ以外の「真と評価される値」が渡された場合は即座にAssertionErrorをスローします。エラーハンドリングのテストやデバッグ時にぜひ活用してみてください。

  1. JavaScriptの関数プロトタイプとは?仕組みと使い方を解説

    JavaScriptで作成されたすべての関数には、JavaScriptエンジンによって自動的にprototypeプロパティが追加されます。このprototypeプロパティはオブジェクトであり、デフォルトではconstructorプロパティを含んでいます。関数のプロトタイプには、以下のようにしてアクセスできます。functionName.prototypeコンストラクタ関数を使ってオブジェクトを生成する場合、このprototypeプロパティを活用することで、同じコンストラクタから作成された複数のオブジェクト間でメソッドやプロパティを効率的に共有することができます。これにより、各インスタンスごとに

  2. JavaScriptでのメソッド借用:call()・apply()・bind()の使い方を解説

    JavaScriptでは、call()、apply()、bind()という3つのメソッドを使うことで、あるオブジェクトが持つメソッドを別のオブジェクトが「借用」できます。これは、本来そのメソッドを持たないオブジェクトに対して、thisの参照先を差し替えてメソッドを実行できる便利なテクニックです。 3つのメソッドの違い call():引数をカンマ区切りで個別に渡し、即座に関数を実行します。 apply():引数を配列(または配列風オブジェクト)として渡し、即座に関数を実行します。 bind():thisを固定した新しい関数を返すだけで、即座には実行されません。返された関数は後から好きなタイミン