wrapWithExceptionHandler method

RequestHandler wrapWithExceptionHandler(
  1. RequestHandler handler
)

Wraps a route handler with exception handling.

Implementation

RequestHandler wrapWithExceptionHandler(RequestHandler handler) {
  return (Request req, Response res) async {
    try {
      await handler(req, res);
    } catch (e, stackTrace) {
      final exceptionHandler = Khadem.make<ExceptionHandlerContract>();
      final result = await exceptionHandler.handle(e, stackTrace);

      if (!res.sent) {
        res
            .status(result.statusCode)
            .problem(
              title: result.title,
              status: result.statusCode,
              detail: result.message,
              type: result.type,
              instance: result.instance,
              extensions: {
                if (result.details != null) 'details': result.details,
                if (result.stackTrace != null)
                  'stack_trace': result.stackTrace.toString(),
                ...result.extensions,
              },
            );
      }
    }
  };
}