You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.3 KiB
59 lines
1.3 KiB
4 weeks ago
|
/**
|
||
|
* Copyright(c) dead_horse and other contributors.
|
||
|
* MIT Licensed
|
||
|
*
|
||
|
* Authors:
|
||
|
* dead_horse <dead_horse@qq.com>
|
||
|
* fengmk2 <fengmk2@gmail.com> (http://fengmk2.com)
|
||
|
*/
|
||
|
|
||
|
'use strict';
|
||
|
|
||
|
/**
|
||
|
* Module dependencies.
|
||
|
*/
|
||
|
|
||
|
var ready = require('get-ready');
|
||
|
var EventEmitter = require('events').EventEmitter;
|
||
|
var util = require('util');
|
||
|
|
||
|
module.exports = Base;
|
||
|
|
||
|
function Base() {
|
||
|
EventEmitter.call(this);
|
||
|
this.on('error', this.defaultErrorHandler.bind(this));
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* inherits from EventEmitter
|
||
|
*/
|
||
|
|
||
|
util.inherits(Base, EventEmitter);
|
||
|
|
||
|
ready.mixin(Base.prototype);
|
||
|
|
||
|
Base.prototype.defaultErrorHandler = function (err) {
|
||
|
if (this.listeners('error').length > 1) {
|
||
|
// ignore defaultErrorHandler
|
||
|
return;
|
||
|
}
|
||
|
console.error('\n[%s][pid: %s][%s][%s] %s: %s \nError Stack:\n %s',
|
||
|
Date(), process.pid, this.constructor.name, __filename, err.name,
|
||
|
err.message, err.stack);
|
||
|
|
||
|
// try to show addition property on the error object
|
||
|
// e.g.: `err.data = {url: '/foo'};`
|
||
|
var additions = [];
|
||
|
for (var key in err) {
|
||
|
if (key === 'name' || key === 'message') {
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
additions.push(util.format(' %s: %j', key, err[key]));
|
||
|
}
|
||
|
if (additions.length) {
|
||
|
console.error('Error Additions:\n%s', additions.join('\n'));
|
||
|
}
|
||
|
console.error();
|
||
|
};
|