UNPKG

3.62 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
8
9function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
10
11/**
12 * Ideally you should extend this woefully inadequate error handler with
13 * something awesome that you have.
14 *
15 * SERIOUSLY: This error handler prints your error stack trace to the user.
16 * Not cool for production bro - not cool at all.
17 *
18 * IMPORTANT NOTE: Exception thrown within this error handler is not caught
19 * at all. This means if you throw exception here, or from async callback
20 * executed from a sync code here - it will stop the server.
21 *
22 * @SERVER
23 */
24var ErrorHandler = function () {
25
26 /**
27 * @param {Logger} logger
28 */
29 function ErrorHandler(logger) {
30 _classCallCheck(this, ErrorHandler);
31
32 this._logger = logger;
33 }
34
35 /**
36 * An uncaught exception at the request level, but headers are already sent
37 * to the user. Nothing to do unless maybe to log.
38 *
39 * @param {Error} error
40 * @param {http.incomingMessage} request
41 * @param {httpServerResponse} response
42 */
43
44
45 _createClass(ErrorHandler, [{
46 key: 'responseSentError',
47 value: function responseSentError(error, request, response) {
48 var preppedRequest = this._logger.prepRequest(request);
49 var preppedResponse = this._logger.prepResponse(response);
50 this._logger.error('Uncaught exception, headers already sent ->', error, [preppedRequest, preppedResponse]);
51 // If headers are already sent, we have no need of actually doing
52 // anything. Just close the connection already.
53 try {
54 response.end();
55 } catch (e) {
56 this._logger.error('Unable to end response to an uncaught exception ->', e, [error, preppedRequest, preppedResponse]);
57 }
58 }
59
60 /**
61 * An uncaught exception at the request level. Headers are not yet sent, so
62 * you can actually dictate what to display (cue cute server error pages).
63 *
64 * @param {Error} error
65 * @param {http.incomingMessage} request
66 * @param {response} response
67 */
68
69 }, {
70 key: 'responseNotSentError',
71 value: function responseNotSentError(error, request, response) {
72 var preppedRequest = this._logger.prepRequest(request);
73 var preppedResponse = this._logger.prepResponse(response);
74 this._logger.error('Uncaught exception ->', error, [preppedRequest, preppedResponse]);
75
76 try {
77 if (error instanceof Error) {
78 // TODO: Awesome default error handler, similar to PHP's Whoops library.
79 response.writeHead(500, { 'Content-Type': 'text/html' });
80 response.end('<pre>' + error.stack + '</pre>');
81 } else {
82 response.end(error + '');
83 }
84 } catch (e) {
85 this._logger.error('Unable to write error page for exception ->', e, [error, preppedRequest, preppedResponse]);
86 }
87 }
88 }]);
89
90 return ErrorHandler;
91}();
92
93exports.default = ErrorHandler;
94//# sourceMappingURL=ErrorHandler.js.map
\No newline at end of file