Exceções não detectadas do Node.js

Normalmente, em Node.js (JavaScript ou qualquer outro), você adiciona muitas cláusulas if para interceptar erros ou adiciona muitos blocos try-catch (se possível por causa de retornos de chamada).

Em seguida, você chama o manipulador de erros que envia um e-mail ao desenvolvedor ou grava o erro em um arquivo ou banco de dados.

Em um sistema de produção, é realmente importante capturar exceções não detectadas também. Por exemplo, uma conversão de tipo simples está faltando ou um arquivo está protegido contra gravação, então seu aplicativo para de funcionar e você não sabe por quê. Ou seu aplicativo é reiniciado automaticamente e você não vê nenhum erro.

Capturar Evento

No Node.js, um uncaughtExceptionevento é disparado.

Você pode capturar esse evento com um simples:

process.on("uncaughtException", function(err) { ... });

e adicionar manipulador de erros na função de retorno de chamada.

Para se manter informado sobre este tipo de erros, adicione uma função simples de e-mail com https://github.com/andris9/Nodemailer

Trecho

Aqui está um pequeno trecho, que envia um e-mail de erro através de seu servidor de e-mail SMTP.

var nodemailer = require("nodemailer");
var config = {
mailMode
: "SMTP",
nodemailer
: {
auth
: {
user
: "username",
pass: "password"
}
host
: "mail.your-domain.tld",
port
: 587,
service
: "yourMailService"
},
senderMail
: "info@your-domain.tld",
problemMail
: "problem@your-domain.tld",
serviceName
: "yourAppName"
};

process
.on("uncaughtException", function(err) {
if(process.env.NODE_ENV === "production")
{
var mailer = nodemailer.createTransport(config.mailMode, config.nodemailer);
var message = {
from: config.senderMail,
to
: config.problemMail,
subject
: "Error in service: " + config.serviceName,
text
: (new Date()).toUTCString() + "nn" +
err
.message + "nn" +
err
.stack
};
mailer
.sendMail(message, function() {
process
.exit(1);
});
}
else
{
console
.error((new Date()).toUTCString() + " uncaughtException: " + err.message);
console
.error(err.stack);
process
.exit(1);
}
});

Ao desenvolver seu aplicativo, um erro não detectado será gravado no console.