node.js - how - readfile nodejs
Cómo capturar ningún archivo para fs.readFileSync()? (4)
Dentro de node.js readFile() muestra cómo capturar un error, sin embargo, no hay comentarios para la función readFileSync() respecto al manejo de errores. Como tal, si trato de usar readFileSync () cuando no hay ningún archivo, aparece el error Error: ENOENT, no such file or directory
.
¿Cómo capturo la excepción que se lanza? El doco no indica qué excepciones se lanzan, así que no sé qué excepciones necesito atrapar. Debo señalar que no me gusta el estilo genérico de ''atrapar todas las excepciones posibles'' de las declaraciones try / catch. En este caso, deseo detectar la excepción específica que ocurre cuando el archivo no existe e intento realizar readFileSync.
Tenga en cuenta que estoy realizando funciones de sincronización solo durante el inicio antes de realizar intentos de conexión, por lo que no se requieren comentarios que no utilicen funciones de sincronización :-)
Básicamente, fs.readFileSync
arroja un error cuando no se encuentra un archivo. Este error proviene del prototipo de Error
y se lanza utilizando throw
, por lo que la única forma de detectarlo es con un bloque 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
}
Lamentablemente, no puedes detectar qué error se ha producido con solo mirar su cadena de prototipos:
if (err instanceof Error)
es lo mejor que puede hacer, y esto será cierto para la mayoría de los errores (si no todos). Por lo tanto, le sugiero que vaya con la propiedad de code
y verifique su valor:
if (err.code === ''ENOENT'') {
console.log(''File not found!'');
} else {
throw err;
}
De esta forma, solo se ocupa de este error específico y vuelve a lanzar todos los otros errores.
Alternativamente, también puede acceder a la propiedad de message
del error para verificar el mensaje de error detallado, que en este caso es:
ENOENT, no such file or directory ''foo.bar''
Espero que esto ayude.
Debe detectar el error y luego verificar qué tipo de error es.
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
}
Si bien la solución aceptada es correcta, encontré una forma mucho mejor de manejar esto. Solo puede verificar si el archivo existe sincrónicamente:
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'');
}
Utilizo una lambda invocada inmediatamente para estos escenarios:
const config = (() => {
try {
return JSON.parse(fs.readFileSync(''config.json''));
} catch (error) {
return {};
}
})();
versión async
:
const config = await (async () => {
try {
return JSON.parse(await fs.readFileAsync(''config.json''));
} catch (error) {
return {};
}
})();