gbox-errors
Version:
Error handlers
70 lines (61 loc) • 2.65 kB
JavaScript
const errorTrace = require('./errorTrace');
const nodemailer = require('nodemailer');
let packageJson;
module.exports = {
generate: function (data, packageJsonData) {
if (packageJsonData) packageJson = packageJsonData;
return {
errorTrace: errorTrace(data),
apiTrace: this.packageJsonDetails(),
generateBy: this.generateBy()
}
},
packageJsonDetails: function () {
return {
apiName: packageJson ? packageJson.name : 'unknown',
gboxErrorsVersion: packageJson ? packageJson.dependencies['gbox-errors'] : 'unknown',
sqlVersion: packageJson ? packageJson.dependencies['sails-mysql'] : 'unknown',
sailsVersion: packageJson ? packageJson.dependencies.sails : 'unknown'
}
},
generateBy: function () {
return `gbox-errors ${packageJson ? packageJson.dependencies['gbox-errors'] : ''}`;
},
sendEmail: async function (error, config) {
let sendEmail = true;
if (config && config.hasOwnProperty('errorNotification') && config.errorNotification && config.hasOwnProperty('contacts') && config.contacts.length) {
if (config.hasOwnProperty('status') && config.status.length) {
let readStatus = error.status.toString().substring(0, 1).concat("00");
if (config.status.indexOf(parseInt(readStatus)) === -1) {
sendEmail = false;
}
}
if (sendEmail) {
let transporter = nodemailer.createTransport({
host:config.host,
port: config.port,
secure: true,
auth: {
user: config.user,
pass: config.pass
},
tls: {
rejectUnauthorized: false
}
});
let mailOptions = {
from: 'service@gaussbox.net', // sender address
to: config.contacts, // list of receivers
subject: `Error ${error.status} on Api - ${packageJson ? packageJson.name : ''}`, // Subject line
text: '', // plain text body
html: `<textarea style="width: 100%;height: 100%;">${JSON.stringify(error, null, 4)}</textarea>` // html body
}
try {
await transporter.sendMail(mailOptions)
} catch (err) {
console.log('gbox-errors email fail!')
}
}
}
}
};