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