1. ホーム
  2. node.js

[解決済み] fs.readFileSync()でファイルがない場合、どのようにキャプチャしますか?

2022-04-29 01:55:29

質問

node.js内 readFile() はエラーを捕捉する方法を示しています。 readFileSync() 関数は、エラー処理に関するものです。そのため、ファイルがないときにreadFileSync()を使用しようとすると、次のようなエラーが発生します。 Error: ENOENT, no such file or directory .

スローされる例外はどのように捕捉すればよいですか?ドコにはどんな例外が投げられるか書いていないので、どんな例外をキャッチすればいいのかわかりません。私は、一般的な「ありとあらゆる例外をキャッチする」スタイルの try/catch ステートメントが好きではないことに注意してください。この場合、ファイルが存在しないときにreadFileSyncを実行しようとすると発生する特定の例外をキャッチしたいのです。

なお、同期関数は起動時に接続を試みる前にのみ実行しているので、同期関数を使うべきでないというコメントは不要です :-)

解決方法は?

基本的には fs.readFileSync は、ファイルが見つからない場合にエラーを投げます。このエラーは Error プロトタイプを使用してスローされます。 throw したがって、キャッチする唯一の方法は try / catch ブロックを作成します。

var fileContents;
try {
  fileContents = fs.readFileSync('foo.bar');
} catch (err) {
  // Here you get the error when the file was not found,
  // but you also get any other error
}

残念ながら、プロトタイプ・チェーンを見ただけでは、どのエラーが投げられたかを判断することはできません。

if (err instanceof Error)

がベストで、これは(すべてではないにせよ)ほとんどのエラーに当てはまります。したがって、私は code プロパティを設定し、その値を確認します。

if (err.code === 'ENOENT') {
  console.log('File not found!');
} else {
  throw err;
}

こうすることで、この特定のエラーにのみ対処し、他のすべてのエラーを再スローすることができます。

また、エラーの message プロパティで、詳細なエラーメッセージを確認することができます。

ENOENT, no such file or directory 'foo.bar'

お役に立てれば幸いです。