Resources
GraphQL Errors
Error handling in GraphQL differs on both server and client-side tooling. When the response contains the errors object
along with the data object, it could mean a partially correct response for the request. Digging into the errors
object provides insights into what part of the query went wrong.
The default errors JSON includes message, locations, and path. According to the working draft of the spec, it is
also possible to send custom data in the extensions key.
Common GraphQL Errors
Server Problems / Network Errors
Server-side errors occur when the GraphQL server cannot process the request due to configuration, network, or runtime
issues. These errors are indicated by HTTP status codes other than 200. Common examples include:
- Bad Request (400): This indicates invalid input. For example:
{
"errors": [
{
"message": "Syntax Error: Unexpected Name 'queryx'",
"locations": [{ "line": 1, "column": 1 }]
}
]
} - Unauthorized (401): This occurs when authentication is missing or invalid.
{
"errors": [
{
"message": "Unauthorized access. Please log in."
}
]
} - Gateway Errors (5xx): These indicate server-side failures such as timeouts or misconfigurations.
{
"errors": [
{
"message": "Internal Server Error. Please try again later."
}
]
}
Client-Side Problems - Validation Rules of GraphQL Query
GraphQL performs validation of all queries before executing them. Validation errors typically arise due to:
Malformed Query:
query {
user(id: 123 {
name
}
}- Error:
{
"errors": [
{
"message": "Syntax Error: Expected ')', found '{'",
"locations": [{ "line": 2, "column": 17 }]
}
]
}
- Error:
Schema Logic Errors: When a query references a non-existent field.
query {
user(id: 123) {
age
}
}- Error:
{
"errors": [
{
"message": "Cannot query field 'age' on type 'User'.",
"locations": [{ "line": 3, "column": 7 }]
}
]
}
- Error:
Variables and Fragments Not Defined Properly:
query GetUser($id: ID!) {
user(id: $userId) {
name
}
}- Error:
{
"errors": [
{
"message": "Variable '$userId' is not defined.",
"locations": [{ "line": 1, "column": 22 }]
}
]
}
- Error:
Top-Level Errors
Top-level errors appear in the errors object and provide details about issues encountered during execution. These
include:
message: A brief description of the error.locations: The location in the query where the error occurred.path: The path to the field that caused the error.- Example:
{
"errors": [
{
"message": "Field 'email' not found on type 'User'.",
"locations": [{ "line": 3, "column": 9 }],
"path": ["user", "email"]
}
]
}
GraphQL Subscription Errors
Subscription errors are encountered during real-time operations over WebSocket connections. Common issues include:
WebSocket Initialization Failure:
- Error:
{
"errors": [
{
"message": "WebSocket connection failed: Invalid WebSocket URL."
}
]
} - Solution: Ensure the URL starts with
ws://orwss://.
- Error:
Invalid HTTP Upgrade:
- Error:
{
"errors": [
{
"message": "Invalid HTTP Upgrade for WebSocket connection."
}
]
} - Solution: Check server configuration to properly handle WebSocket upgrades.
- Error:
Missing Connection Parameters:
- Example:
const wsLink = new WebSocketLink({
uri: 'wss://graphql.example.com/graphql',
options: {
reconnect: true,
connectionParams: {
headers: {
Authorization: `Bearer ${token}`,
},
},
},
}); - Error:
{
"errors": [
{
"message": "Authorization headers missing in connectionParams."
}
]
}
- Example: