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,
          },
        );
      }
    }
  };
}