web-dev-qa-db-ja.com

ファイルが存在しない場合、fs.statSyncはエラーをスローします

ファイルが存在するかどうかを判断しようとしています。存在しない場合、コードを作成して作成します。次のコードを使用すると、ファイルが存在する場合、「存在する」と出力されます。存在しない場合、アプリがクラッシュします。ここに私のコードがあります:

var checkDuplicateFile = function(){
    var number = room.number.toString();
    var stats = fs.statSync(number);
    if(stat){
        console.log('it exists');
    }else{
        console.log('it does not exist');
    }

};
20
Mike

fs.statSyncブロックでtry/catchをラップしていないため、アプリケーションがクラッシュしています。ノードの同期関数は、asyncバージョンの場合のようにエラーを返しません。代わりに、キャッチする必要があるエラーをスローします。

try {
  var stats = fs.statSync(number);
  console.log('it exists');
}
catch(err) {
    console.log('it does not exist');
}

アプリでこの操作を同期する必要がない場合(この操作が完了するまで実行をブロックする)、非同期バージョンを使用します。

fs.stat(number, function(err, data) {
  if (err) 
    console.log('it does not exist');
  else 
    console.log('it exists');
});
40
peteb