English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

NodeJS 基础教程

NodeJS Express.js

NodeJS 缓冲&URL;

NodeJS MySql

NodeJS MongoDB

NodeJS 文件(FS)

NodeJS 其他

Try Catch no Node.js

Try Catch no Node.js 是一种错误处理机制。当期望一段代码抛出错误并被try包围时,可以在catch块中解决代码段中抛出的任何异常。如果未以任何方式处理错误,程序将突然终止,这不是一件好事。

注意:最好将Try Catch no Node.js仅用于同步操作。我们还将在本教程中了解为什么不应该将Try Catch用于异步操作。

  • Node.js尝试捕获的示例

  • Por que não usar Try Catch do Node.js para capturar erros em operações assíncronas?

  • O que acontece com as exceções no código assíncrono?

Node.js尝试捕获的示例

在此示例中,我们将在尝试在同步读取文件的代码段周围使用Try Catch

#example for Node.js Try Catch
var fs = require('fs'); 
 
try{ 
    // 文件不存在
    var data = fs.readFileSync('sample.html'); 
 } catch (err) { 
    console.log(err); 
 } 
 
console.log("Continuando com outras instruções...");

Quando o programa acima for executado...

Saída do Terminal

arjun@arjun-VPCEH26EN:~/nodejs$ node nodejs-try-catch-example.js  
 { Error: ENOENT: no such file or directory, open 'sample.html'
    at Object.fs.openSync (fs.js:652:18) 
    at Object.fs.readFileSync (fs.js:553:33) 
    at Object.<anonymous> (/nodejs/nodejs-try-catch-example.js:5:16) 
    at Module._compile (module.js:573:30) 
    at Object.Module._extensions..js (module.js:584:10) 
    at Module.load (module.js:507:32) 
    at tryModuleLoad (module.js:470:12) 
    at Function.Module._load (module.js:462:3) 
    at Function.Module.runMain (module.js:609:10) 
    at startup (bootstrap_node.js:158:16) 
  errno: -2, 
  código: 'ENOENT' 
  sistema de chamadas: 'open' 
  caminho: 'sample.html' 
Continuando com outras instruções..

Observe que o programa não termina inesperadamente, mas continua executando as instruções subsequentes.

Agora, vamos ver o que acontece se não usarmos try catch na mesma operação acima.

# erro sem Node.js Try Catch
var fs = require('fs'); 
 
// Tentando ler o arquivo de forma síncrona, em vez de apresentar o arquivo
var data = fs.readFileSync('sample.html'); 
 
console.log("Continuando com outras instruções...");

O código não possui mecanismo de tratamento de erros e o programa termina inesperadamente, sem executar as próximas instruções.

Quando o programa acima for executado...

Saída do Terminal

arjun@arjun-VPCEH26EN:~/nodejs$ node nodejs-try-catch-example-1.js  
/home/arjun/nodejs/nodejs-try-catch-example-1.js:1
 (function (exports, require, module, __filename, __dirname) { # exemplo para Node.js Try Catch
                                                              ^
 
SyntaxError: Token inválido ou inesperado
    at createScript (vm.js:74:10) 
    at Object.runInThisContext (vm.js:116:10) 
    at Module._compile (module.js:537:28) 
    at Object.Module._extensions..js (module.js:584:10) 
    at Module.load (module.js:507:32) 
    at tryModuleLoad (module.js:470:12) 
    at Function.Module._load (module.js:462:3) 
    at Function.Module.runMain (module.js:609:10) 
    at startup (bootstrap_node.js:158:16) 
    at bootstrap_node.js:598:3

Por que não usar Try Catch do Node.js para capturar erros em operações assíncronas?

Considere o seguinte exemplo, onde tentamos usar uma função de callback para ler arquivos de forma assíncrona e lançar erros quando necessário. Em seguida, usamos um bloco 'tentar capturar' ao redor da tarefa, esperando capturar os erros lançados.

# Try Catch no Node.js com Função de Callback Assíncrona
var fs = require('fs'); 
 
try{ 
    fs.readFile('sample.txta', 
        // função de callback
        function(err, data) {  
            if (err) throw err; 
    }); 
 } catch(err){ 
    console.log("In Catch Block") 
    console.log(err); 
 } 
console.log("Next Statements")

Saída do Terminal

arjun@arjun-VPCEH26EN:~/nodejs/try-catch$ node nodejs-try-catch-example-2.js  
Next Statements
/home/arjun/nodejs/try-catch/nodejs-try-catch-example-2.js:8
            if (err) throw err; 
                     ^
 
Error: ENOENT: arquivo ou diretório inexistente, abrir 'sample.txta'

Se você observar a saída, por favor, façaConsole.noif(err)  throw  errjá executadolog("Next Statements")  ,porque, a leitura de arquivo é concluída de forma assíncrona e o controle não espera a conclusão da operação de arquivo, mas continua a executar a sentença next.Isso significa que o controle não está dentro do bloco try catch.Se ocorrer um erro durante a operação assíncrona, o controle não saberá de nenhum bloco try catch.Portanto, o bloco Try Catch que usamos não pode capturar erros que podem ocorrer durante a operação assíncrona, os desenvolvedores devem evitar usá-loTry Catch no Node.jsBlocoCapturaErros gerados por tarefas assíncronas

O que acontece com as exceções no código assíncrono?

Se você está confuso sobre o que acontece com as exceções em código assíncrono, esta é a resposta. Se você já usou a função de callback Callback e observou o objeto de erro como parâmetro, aqui é onde todos os erros ou exceções são reportados de volta ao Node.js.

Resumo:

Neste tutorial do Node.js – Try Catch no Node.js,aprendemos a usar Try Catch e os cenários onde não se usa Try Catch.