Автомобиль и Список автомобилей - фактически два отдельных типа.Поле не может быть преобразовано в один объект Car один раз, а массив объекта Car - другой.
Ваш запрос возвращает значение NULL для name
, поскольку вы сказали, что поле cars
будет преобразовано в одинобъект, но вместо этого он разрешается в массив.В результате он ищет свойство с именем name
в объекте массива, и поскольку он не существует, он возвращает ноль.
Вы можете справиться с этим несколькими различными способами.Чтобы оставить все в одном запросе, вы можете использовать filter
вместо find
и изменить тип запроса на List.
cars: {
type: new GraphQLList(CarType), // note the change here
args: {
id: {
type: GraphQLString
},
},
resolve: (parent, args) => {
if (args.id) {
return cars.filter(car => car.id === args.id);
}
return cars;
}
}
В качестве альтернативы, вы можете разделить его на два отдельных запроса:
cars: {
type: new GraphQLList(CarType),
resolve: (parent, args) => cars,
},
car: {
type: CarType,
args: {
id: {
// example of using GraphQLNonNull to make the id required
type: new GraphQLNonNull(GraphQLString)
},
},
resolve: (parent, args) => cars.find(car => car.id === args.id),
}
Проверьте документы для получения дополнительных примеров и опций.