Node.js内で readFile() はエラーをキャプチャする方法を示しますが、エラー処理に関する readFileSync() 関数にはコメントがありません。そのため、ファイルがないときにreadFileSync()を使用しようとすると、エラーError: ENOENT, no such file or directory
が表示されます。
スローされている例外をキャプチャするにはどうすればよいですか? docoは、どの例外がスローされるかを述べていないため、どの例外をキャッチする必要があるのかわかりません。 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'
お役に立てれば。
受け入れられている解決策は問題ありませんが、これを処理するはるかに良い方法を見つけました。ファイルが同期して存在するかどうかを確認するだけです。
var file = 'info.json';
var content = '';
// Check that the file exists locally
if(!fs.existsSync(file)) {
console.log("File not found");
}
// The file *does* exist
else {
// Read the file and do anything you want
content = fs.readFileSync(this.local, 'utf-8');
}
エラーをキャッチして、エラーの種類を確認する必要があります。
try {
var data = fs.readFileSync(...)
} catch (err) {
// If the type is not what you want, then just throw the error again.
if (err.code !== 'ENOENT') throw err;
// Handle a file-not-found error
}
これらのシナリオでは、すぐに呼び出されるラムダを使用します。
const config = (() => {
try {
return JSON.parse(fs.readFileSync('config.json'));
} catch (error) {
return {};
}
})();
async
バージョン:
const config = await (async () => {
try {
return JSON.parse(await fs.readFileAsync('config.json'));
} catch (error) {
return {};
}
})();