English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

NodeJS 基礎チュートリアル

NodeJS Express.js

NodeJS バッファ&URL;

NodeJS MySql

NodeJS MongoDB

NodeJS ファイル(FS)

NodeJS その他

Node.jsのTry Catch

Node.jsのTry Catch これはエラーハンドリングのメカニズムです。特定の一段のコードがエラーを投げ出すことを期待して、try文で囲まれた場合、catchブロックでそのコード部分で発生した全ての例外を解決することができます。エラーが何らかの方法で処理されない場合、プログラムは突然終了し、これは良いことではありません。

注意:以下は最善の方法です。Node.jsのTry Catch同期操作のみに使用されます。また、このチュートリアルでは、Try Catch非同期操作に使用されます。

  • Node.jsで試行錯誤を行う例

  • なぜNode.jsのTry Catchを使用して非同期操作のエラーをキャッチしないのか

  • 非同期コードの例外はどうなるのでしょうか?

Node.jsで試行錯誤を行う例

このサンプルでは、以下に試みる同期ファイル読み取りのコード部分に使用されていますTry Catch

#example for Node.js Try Catch
var fs = require('fs'); 
 
try{ 
    // ファイルが存在しません
    var data = fs.readFileSync('sample.html'); 
 } catch (err) { 
    console.log("Catchブロック内") 
 console.log(err); 
 
console.log("Continuing with other statements...");

上記のプログラムを実行すると...

console.log("次のステートメント")

ターミナル出力-arjun@arjun26VPCEH/nodejs$ node nodejs-nodejs-try-example.js  
 { Error: ENOENT: no such file or directory, open 'sample.html'
    at Object.fs.openSync (fs.js:652:18) 
    at Object.fs.readFileSync (fs.js:553:33) 
    at Object.<anonymous> (/arjun/arjun-nodejs-try-example.js:5:16) 
    at Module._compile (module.js:573:30) 
    at Object.Module._extensions..js (module.js:584:10) 
    at Module.load (module.js:507:32) 
    at tryModuleLoad (module.js:470:12) 
    at Function.Module._load (module.js:462:3) 
    at Function.Module.runMain (module.js:609:10) 
    at startup (bootstrap_node.js:158:16) 
  errno: -2, 
  code: 'ENOENT', 
  syscall: 'open', 
  path: 'sample.html'} 
Continuing with other statements..

プログラムは突然終了するのではなく、その後のステートメントを実行し続けます。

今や、上記の同じ操作にtry catchを使用しない場合に何が起こるかを見てみましょう。

# error without Node.js Try Catch
var fs = require('fs'); 
 
// ファイルを同期で読み込むことを試み、presenetファイルを代わりに使用するのではなく
var data = fs.readFileSync('sample.html'); 
 
console.log("Continuing with other statements...");

コードにはエラーハンドリングメカニズムがなく、プログラムは突然終了し、その後のステートメントは実行されません。

上記のプログラムを実行すると...

console.log("次のステートメント")

ターミナル出力-arjun@arjun26VPCEH/nodejs$ node nodejs-nodejs-try-catch-1catch$ node nodejs  
/次のステートメント/home/arjun/arjun-nodejs-try-catch-1example1
 (function (exports, require, module, __filename, __dirname) { # example for Node.js Try Catch
                                                              if(err) throw err;
 
SyntaxError: Invalid or unexpected token
    at createScript (vm.js:74:10) 
    at Object.runInThisContext (vm.js:116:10) 
    at Module._compile (module.js:537:28) 
    at Object.Module._extensions..js (module.js:584:10) 
    at Module.load (module.js:507:32) 
    at tryModuleLoad (module.js:470:12) 
    at Function.Module._load (module.js:462:3) 
    at Function.Module.runMain (module.js:609:10) 
    at startup (bootstrap_node.js:158:16) 
    at bootstrap_node.js:598:3

なぜNode.jsのTry Catchを使用して非同期操作のエラーをキャッチしないのか

以下の例を考えてみましょう。その例では、ファイルを読み込むためのコールバック関数を使用して非同期にファイルを読み取り、問題が発生した場合にエラーをスローします。その後、タスクを「試行捕獲」ブロックで囲み、スローされたエラーをキャッチしようとします。

# Node.jsの非同期コールバック関数でのTry Catch
var fs = require('fs'); 
 
try{ 
    fs.readFile('sample.txta', 
        // コールバック関数
        function(err, data) {  
            .js: 
    }); 
 catch(err){ 
    } 
    console.log("Catchブロック内") 
 console.log(err); 
}

console.log("次のステートメント")

ターミナル出力-arjun@arjun26VPCEH/arjun/nodejs-EN:~-nodejs-try-catch-2catch$ node nodejs  
.js
/次のステートメント/home/arjun/nodejs-try/arjun-nodejs-try-catch-2example8
            .js: 
                     if(err) throw err;
 
^

Error: ENOENT: ファイルまたはディレクトリが見つかりません、'sample.txta'をオープン出力が観察された場合は、コントロール台。if(err)  throw  err前に実行log("次のステートメント")  これは、ファイルの読み取りが非同期に完了し、コントロールがファイル操作の完了を待たずに次のステートメントを実行し続けるためです。これは、コントロールがtry catchブロック内にいないことを意味します。非同期操作中にエラーが発生した場合、コントロールはtry catchブロックの何も知りません。したがって、私たちのTry Catchブロックは非同期操作中に発生する可能性のあるエラーをキャッチできず、開発者はそれを使用を避けるべきです。Node.jsのTry Catchブロックキャッチ非同期タスクによって引き起こされるエラー

非同期コードの例外はどうなるのでしょうか?

非同期コードの例外が何になるか分からない場合は、これが答えです。Callback関数を通じてエラーオブジェクトが引数として観察され、すべてのエラーまたは例外がここでNode.jsに報告される場合があります。

まとめ:

このNode.jsのチュートリアルでは、 Node.jsのTry Catchで、Try Catchの使用方法とTry Catchを使用しないシーンについて学びました。