Como lidar com todas as exceções no nó.js

depois de trabalhar durante algumas semanas com o node.js, descobri que há uma diferença entre o nó.erros do servidor js e linguagens regulares do lado do servidor como PHP.

um exemplo simples: se um erro acontece em nosso site por qualquer razão.

em PHP
Se um usuário enviar alguns dados inválidos para o servidor e MySQL, o MySQL irá enviar um erro para esse usuário específico e toda a aplicação não irá abaixo.

Em Nodejs
Se um utilizador enviar alguns dados inválidos para o servidor e MySQL, o servidor nodejs irá abaixo e assim todos os usuários irão se desligar e não há mais nenhuma conexão entre os usuários.

Este é um grande problema. em grandes aplicações web, é impossível lidar com todos os erros para evitar que o servidor Nodejs caia, e a questão é:,
Existe alguma maneira de lidar com quaisquer erros fatais desconhecidos e exceções a uma saída específica ou algo parecido.

Author: kaushik0033, 2013-11-11

2 answers

Você pode usar o eventouncaughtException no objecto do processo para fazer o que quiser, mas como outros disseram, são recomendados domínios e erros de captura/manipulação no nível correcto.

process.on('uncaughtException', function(err) {
  console.log('Caught exception: ' + err);
});
 21
Author: The Reddest, 2013-11-11 17:05:55

Você deve simplesmente validar os dados do pedido dentro de suas rotas, pegar qualquer erro (tente-catch irá funcionar aqui, uma vez que é uma operação de sincronização) e lidar com ele, retornando o estado HTTP apropriado (por exemplo, 400) para a pessoa que ligou e registar o erro. Se você está usando Express você nem mesmo tem que usar try-catch como Express irá pegar todas as exceções síncronas e permitir que você lidar com isso centralmente.

Pessoalmente, não acho que apanhar erros de validação usando o processo.em ('uncaughtException') é the best match for your need for two main reasons:
    Neste local, você não tem nenhum contexto de onde o erro ocorreu e não pode enviar uma resposta para o chamador
  • qualquer tipo de erro não tratado chegará aqui, se você não tem idéia de que tipo de erro ocorreu é recomendado para reiniciar o processo. Não faz sentido reiniciar o processo por causa de entrada inválida, por exemplo, é muito fácil desta forma para trazer o aplicativo para baixo para qualquer ouvinte externo (DDOS)

Pode ler aqui outras boas práticas de manipulação de erros e referir-se especificamente às balas 4,6 e 10

 2
Author: Yonatan, 2016-05-31 13:28:36