Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | 3x 3x 3x 9x 9x 9x 1x 1x 8x 2x 2x 2x 6x | import { INTERNAL_SERVER_ERROR } from 'http-status-codes';
import { json, NextFunction, Request, Response } from 'express';
import { ErrorRequestHandler } from 'express-serve-static-core';
import { ApiProblem } from './api-problem';
type MiddlewareOptionsType = { stackTrace?: boolean; contentType?: string };
type ExpressProblemMiddlewareType = (
options?: MiddlewareOptionsType,
) => ErrorRequestHandler;
export const ExpressMiddleware: ExpressProblemMiddlewareType = function(
options: MiddlewareOptionsType = {},
): ErrorRequestHandler {
// Merge the options with defaults
options = {
stackTrace: true,
contentType: 'application/problem+json',
...options,
};
return function(err: any, req: Request, res: Response, next: NextFunction) {
// For API problems, just respond with the error
if (err instanceof ApiProblem) {
res
.status(err.status)
.header('Content-Type', options.contentType)
.send(JSON.stringify(err));
return;
}
// For Exceptions, create internal error exception
if (err instanceof Error) {
const error: ApiProblem = new ApiProblem({
status: INTERNAL_SERVER_ERROR,
detail: err.message,
additional: options.stackTrace
? {
stack: err?.stack || undefined,
}
: undefined,
});
res
.status(error.status)
.header('Content-Type', options.contentType)
.send(JSON.stringify(error));
return;
}
next();
};
};
|