@cley_faye/boilerplate 3.5.1 → 3.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -30,6 +30,10 @@ export interface LogOptions {
|
|
|
30
30
|
logger?: winston.Logger;
|
|
31
31
|
timestamp?: boolean;
|
|
32
32
|
}
|
|
33
|
+
export interface DefaultErrorHandlerConfig {
|
|
34
|
+
/** Set to true to allow server errors without a code to be sent as-is in the response */
|
|
35
|
+
noErrorFilter?: boolean;
|
|
36
|
+
}
|
|
33
37
|
export interface PipelineSettings {
|
|
34
38
|
topLevels?: Array<RouterWithNullDef>;
|
|
35
39
|
routes?: Array<RouterWithNullDef>;
|
|
@@ -39,7 +43,7 @@ export interface PipelineSettings {
|
|
|
39
43
|
options?: {
|
|
40
44
|
log?: LogOptions;
|
|
41
45
|
middleware?: MiddlewareOptions;
|
|
42
|
-
defaultErrorHandler?: boolean;
|
|
46
|
+
defaultErrorHandler?: boolean | DefaultErrorHandlerConfig;
|
|
43
47
|
};
|
|
44
48
|
}
|
|
45
49
|
export default class PipelineBuilder {
|
|
@@ -32,30 +32,40 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
32
32
|
const express_1 = __importDefault(require("express"));
|
|
33
33
|
const winston_js_1 = require("../winston.js");
|
|
34
34
|
const logger_js_1 = require("./logger.js");
|
|
35
|
-
const defaultErrorHandler = (err, req, res, next) => {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
35
|
+
const defaultErrorHandler = (errorHandlerConfig) => (err, req, res, next) => {
|
|
36
|
+
const noErrorFilter = typeof errorHandlerConfig === "boolean"
|
|
37
|
+
? false
|
|
38
|
+
: Boolean(errorHandlerConfig.noErrorFilter);
|
|
39
|
+
if (!res.headersSent) {
|
|
40
|
+
if (err.statusCode) {
|
|
41
|
+
const message = err.expose
|
|
42
|
+
? err.message
|
|
43
|
+
: undefined;
|
|
44
|
+
const accepted = req.accepts([
|
|
45
|
+
"text",
|
|
46
|
+
"html",
|
|
47
|
+
"json",
|
|
48
|
+
]);
|
|
49
|
+
if (accepted === "json") {
|
|
50
|
+
res.status(err.statusCode).send({
|
|
51
|
+
statusCode: err.statusCode,
|
|
52
|
+
message,
|
|
53
|
+
});
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
if (message) {
|
|
57
|
+
res.status(err.statusCode).send(message);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
res.sendStatus(err.statusCode);
|
|
61
|
+
}
|
|
50
62
|
return;
|
|
51
63
|
}
|
|
52
|
-
if (
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
res.sendStatus(err.statusCode);
|
|
64
|
+
if (!noErrorFilter) {
|
|
65
|
+
// eslint-disable-next-line @typescript-eslint/no-magic-numbers
|
|
66
|
+
res.status(500).send("An unexpected error occured");
|
|
67
|
+
return;
|
|
57
68
|
}
|
|
58
|
-
return;
|
|
59
69
|
}
|
|
60
70
|
next(err);
|
|
61
71
|
};
|
|
@@ -257,10 +267,10 @@ class PipelineBuilder {
|
|
|
257
267
|
(0, logger_js_1.registerErrorLogger)(router, logOptions);
|
|
258
268
|
}
|
|
259
269
|
}
|
|
260
|
-
_setDefaultErrorHandler(router,
|
|
261
|
-
if (
|
|
270
|
+
_setDefaultErrorHandler(router, defaultErrorHandlerConfig) {
|
|
271
|
+
if (defaultErrorHandlerConfig) {
|
|
262
272
|
this.internalLog("Adding default error handler");
|
|
263
|
-
router.use(defaultErrorHandler);
|
|
273
|
+
router.use(defaultErrorHandler(defaultErrorHandlerConfig));
|
|
264
274
|
}
|
|
265
275
|
}
|
|
266
276
|
}
|