Closed
Description
Expected Behaviour
I expected the error response to be structured like this:
{
"errors": [
{
"locations": [
{
"column": 8,
"line": 1
}
],
"message": "Variable \"$input\" got invalid value \"foo\"; Int cannot represent non-integer value: \"foo\""
}
]
}
Actual Behaviour
but instead it was nested twice like so:
{
"errors": [
{
"errors": [
{
"locations": [
{
"column": 8,
"line": 1
}
],
"message": "Variable \"$input\" got invalid value \"foo\"; Int cannot represent non-integer value: \"foo\""
}
]
}
]
}
Debug Information
Minimal example to reproduce:
Code:
const { GraphQLSchema, GraphQLObjectType, GraphQLInt } = require("graphql");
const express = require("express");
const { createHandler } = require("graphql-http/lib/use/express");
const schema = new GraphQLSchema({
query: new GraphQLObjectType({
name: "Query",
fields: {
hello: {
type: GraphQLInt,
args: {
input: {
type: GraphQLInt,
},
},
},
},
}),
});
const app = express();
app.all("/graphql", createHandler({ schema }));
app.listen({ port: 4000 });
console.log("Listening to port 4000");
Send a query such as:
query ($input: Int) {
hello(input: $input)
}
with variables:
{ "input": "foo" }
At first glance after briefly debugging it appears as though the error is here in the makeResponse
function.
Further Information
The nesting format shown above under the "Expected Behaviour" section is the response that is returned by other GraphQL server frameworks such as express-graphql
and graphql-yoga
. Other errors returned by graphql-http
are also not nested twice, such as when sending the following query against the example above.
Query
{
hello(input: "foo")
}
Response:
{
"errors": [
{
"locations": [
{
"column": 16,
"line": 1
}
],
"message": "Int cannot represent non-integer value: \"foo\""
}
]
}