render method

  1. @override
Response render(
  1. Context ctx,
  2. Object error
)
override

Renders a Response from the given error and ctx.

Implementation

@override
Response render(Context ctx, Object error) {
  final logger = Logger.withContext(ctx);
  final isDev = Config.get('APP_ENV', 'development') == 'development';

  if (error is AbortException) {
    return error.response;
  }

  if (error is HttpException) {
    return ctx.json(error.toJson(), status: error.statusCode);
  }

  // Handle unknown exceptions
  logger.error('Unhandled System Error at [${ctx.request.method} ${ctx.request.uri.path}]: $error', error: error);

  final message = isDev ? error.toString() : 'Internal Server Error';
  final stack = isDev && error is Error ? error.stackTrace?.toString() : null;

  return ctx.json({
    'message': message,
    if (stack != null) 'stack': stack,
    if (isDev) 'type': error.runtimeType.toString(),
  }, status: 500);
}