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