|                                                          |  | /** * 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();};
 |