Module: GraphQL::Schema::CatchallMiddleware

Defined in:
lib/graphql/schema/catchall_middleware.rb

Overview

In early GraphQL versions, errors would be "automatically" rescued and replaced with "Internal error". That behavior was undesirable but this middleware is offered for people who want to preserve it.

It has a couple of differences from the previous behavior:

  • Other parts of the query will be run (previously, execution would stop when the error was raised and the result would have no "data" key at all)
  • The entry in Query::Context#errors is a ExecutionError, not the originally-raised error.
  • The entry in the "errors" key includes the location of the field which raised the errors.

Examples:

Use CatchallMiddleware with your schema

# All errors will be suppressed and replaced with "Internal error" messages
MySchema.middleware << GraphQL::Schema::CatchallMiddleware

Constant Summary collapse

MESSAGE =
"Internal error"

Class Method Summary collapse

Class Method Details

.call(parent_type, parent_object, field_definition, field_args, query_context, next_middleware) ⇒ Object

Rescue any error and replace it with a ExecutionError whose message is MESSAGE



27
28
29
30
31
# File 'lib/graphql/schema/catchall_middleware.rb', line 27

def self.call(parent_type, parent_object, field_definition, field_args, query_context, next_middleware)
  next_middleware.call
rescue StandardError => err
  GraphQL::ExecutionError.new(MESSAGE)
end