mirror of https://github.com/jkjoy/sunpeiwen.git
59 lines
1.3 KiB
JavaScript
59 lines
1.3 KiB
JavaScript
/**
|
|
* 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();
|
|
};
|