No node.js, readFile () mostra como capturar um erro, no entanto, não há comentários para a função readFileSync () em relação à manipulação de erros. Sendo assim, se eu tentar usar o readFileSync () quando não houver arquivo, recebo o erro Error: ENOENT, no such file or directory
.
Como capturar a exceção que está sendo lançada? O documento não declara quais exceções são lançadas, então não sei quais exceções preciso capturar. Devo observar que não gosto do estilo genérico de 'pegar todas as exceções possíveis' das instruções try / catch. Nesse caso, desejo capturar a exceção específica que ocorre quando o arquivo não existe e tento executar o readFileSync.
Observe que eu estou executando funções de sincronização apenas na inicialização antes de servir as tentativas de conexão, portanto, comentários que eu não deveria estar usando funções de sincronização não são necessários :-)
fonte
fs.existsSync()
como pode ser visto na minha nova respostaRespostas:
Basicamente,
fs.readFileSync
gera um erro quando um arquivo não é encontrado. Este erro é doError
protótipo e lançado usandothrow
, portanto, a única maneira de capturar é com umtry / catch
bloco:Infelizmente, você não pode detectar qual erro foi lançado apenas observando sua cadeia de protótipos:
é o melhor que você pode fazer, e isso será verdade para a maioria (se não todos) dos erros. Por isso, sugiro que você vá com a
code
propriedade e verifique seu valor:Dessa forma, você lida apenas com esse erro específico e lança novamente todos os outros erros.
Como alternativa, você também pode acessar a
message
propriedade do erro para verificar a mensagem de erro detalhada, que neste caso é:Espero que isto ajude.
fonte
EACCES
código deve ser verificado na declaração se para o caso quando o arquivo está lá, mas não pode ser lido devido à falta de permissõesEu prefiro essa maneira de lidar com isso. Você pode verificar se o arquivo existe de forma síncrona:
fonte
files
com tudo o que tenho aprendido a tornar o assíncrono e o try / catch mais fácil.Você precisa capturar o erro e depois verificar que tipo de erro é esse.
fonte
Eu uso um lambda chamado imediatamente para estes cenários:
async
versão:fonte
fs
é um módulo Nófs.readFileAsync()
agorafs.readFile()
e também não deve colocar a função assíncrona dentro de uma tentativa / captura em node.js. o try / catch nunca receberá o erro, pois é assíncrono. em vez disso, transmita o erro no retorno de chamada e lida com ele:fs.readFile('/etc/passwd', (err, data) => { if (err) throw err; console.log(data); });
from: nodejs.org/dist/latest-v12.x/docs/api/…Tente usar o Async para evitar o bloqueio do único thread que você possui com o NodeJS. Veja este exemplo:
Mais tarde, pode usar esta função assíncrona com try / catch de qualquer outra função:
Feliz codificação!
fonte
O mecanismo try… catch do JavaScript não pode ser usado para interceptar erros gerados por APIs assíncronas. Um erro comum para iniciantes é tentar usar throw dentro de um retorno de chamada com erro:
Isso não funcionará porque a função de retorno de chamada passada para fs.readFile () é chamada de forma assíncrona. Quando o retorno de chamada foi chamado, o código circundante, incluindo o bloco try ... catch, já havia saído. Lançar um erro dentro do retorno de chamada pode travar o processo Node.js. na maioria dos casos. Se os domínios estiverem ativados ou um manipulador tiver sido registrado com process.on ('uncaughtException'), esses erros poderão ser interceptados.
referência: https://nodejs.org/api/errors.html
fonte