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 uncaughtException
evento é 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.