Dentro de node.js, readFile () muestra cómo capturar un error, sin embargo, no hay comentarios para la función readFileSync () con respecto al manejo de errores. Como tal, si intento 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, por lo que no sé qué excepciones necesito atrapar. Debo señalar que no me gusta el estilo genérico de 'capturar todas las excepciones posibles' de las declaraciones try / catch. En este caso, deseo capturar la excepción específica que ocurre cuando el archivo no existe e intento realizar el readFileSync.
Tenga en cuenta que estoy realizando funciones de sincronización solo en el inicio antes de servir los intentos de conexión, por lo que no es necesario comentar que no debería usar las funciones de sincronización :-)
fuente
fs.existsSync()
como se puede ver en mi nueva respuestaRespuestas:
Básicamente,
fs.readFileSync
arroja un error cuando no se encuentra un archivo. Este error proviene delError
prototipo y se usathrow
, por lo tanto, la única forma de atraparlo es con untry / catch
bloque:Desafortunadamente, no puede detectar qué error se ha lanzado simplemente mirando su cadena de prototipos:
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
code
propiedad y verifique su valor:De esta manera, solo lidias con este error específico y vuelves a lanzar todos los demás errores.
Alternativamente, también puede acceder a la
message
propiedad del error para verificar el mensaje de error detallado, que en este caso es:Espero que esto ayude.
fuente
EACCES
debe verificar el código en la declaración if para el caso cuando el archivo está allí pero no se puede leer debido a la falta de permisosPrefiero esta forma de manejar esto. Puede verificar si el archivo existe sincrónicamente:
fuente
files
con todo lo que he estado aprendiendo para hacer que la sincronización y el intento / captura sean más fáciles.Debe detectar el error y luego verificar qué tipo de error es.
fuente
Utilizo una lambda invocada inmediatamente para estos escenarios:
async
versión:fuente
fs
es un módulo Nodefs.readFileAsync()
es ahorafs.readFile()
y tampoco debería poner la función asíncrona dentro de un try / catch en node.js. el try / catch nunca recibirá el error ya que es asíncrono. en su lugar, pase el error en la devolución de llamada y maneje allí:fs.readFile('/etc/passwd', (err, data) => { if (err) throw err; console.log(data); });
desde: nodejs.org/dist/latest-v12.x/docs/api/…Intente usar Async en su lugar para evitar bloquear el único hilo que tiene con NodeJS. Mira este ejemplo:
Más tarde puede usar esta función asincrónica con try / catch desde cualquier otra función:
¡Feliz codificación!
fuente
El mecanismo JavaScript try ... catch no puede utilizarse para interceptar errores generados por API asincrónicas. Un error común para los principiantes es intentar usar throw dentro de una devolución de llamada de primer error:
Esto no funcionará porque la función de devolución de llamada pasada a fs.readFile () se llama de forma asincrónica. Para cuando se haya llamado la devolución de llamada, el código circundante, incluido el bloque try ... catch, ya habrá salido. Lanzar un error dentro de la devolución de llamada puede bloquear el proceso Node.js en la mayoría de los casos. Si los dominios están habilitados, o se ha registrado un controlador con process.on ('uncaughtException'), dichos errores pueden ser interceptados.
referencia: https://nodejs.org/api/errors.html
fuente