2015-10-28 20 views
12

Sto tentando di determinare se esiste un file. Se non esiste, vorrei che il mio codice continuasse così sarà creato. Quando utilizzo il seguente codice, se il file esiste, stampa che "esiste". Se non esiste, si blocca la mia app. Ecco il mio codice:fs.statSync genera un errore se il file non esiste

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'); 
    } 

}; 
+0

controllo questa domanda, rispondere è simile: http://stackoverflow.com/questions/4482686/check-synchronously-if-file-directory-exists-in-node-js –

+0

Che non aiuta me. Non risponde alla domanda che ho posto. – Mike

+0

non puoi usare la versione asincrona della funzione? https://nodejs.org/api/fs.html#fs_file_system –

risposta

25

L'applicazione si blocca perché non stai avvolgendo il fs.statSync in un blocco try/catch. Le funzioni di sincronizzazione nel nodo non restituiscono l'errore come farebbero nelle versioni async. Invece, lanciano i loro errori che devono essere catturati.

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

Se l'applicazione non richiede questa operazione definita sincrona (blocco ulteriore esecuzione finché questa operazione è terminata) allora vi utilizzare la versione asincrona.

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