GraphQL relay возвращает одну запись
Я использовал graphql-relay в моем проекте
Когда запустите этот запрос в моем grapgql:
{
viewer{
boRelayCustomerInfo(_id:"59267769de82262d7e39c47c") {
edges {
node {
id
}
}
}
}
}
Я дал эту ошибку:"message": "arraySlice.slice is not a function"
Мой код запроса:
import {
GraphQLID,
GraphQLNonNull,
} from 'graphql'
import {
connectionArgs,
connectionFromPromisedArray,
} from 'graphql-relay'
import { customerConnection } from '@/src/schema/type/customer/CustomerType'
import { CustomerModel, ObjectId } from '@/src/db'
export default {
type: customerConnection.connectionType,
args: {
...connectionArgs,
_id: {
type: new GraphQLNonNull(GraphQLID),
},
},
resolve: (_, args) => connectionFromPromisedArray(
CustomerModel.findOne({_id: ObjectId(args._id)}),
args,
),
}
расскажите пожалуйста, как вернуть только одну запись в эстафете.
1 ответ
Как указано в официальном документе graphql-relay-js
connectionFromPromisedArray принимает обещание, которое разрешается в массив
Итак, проблема здесь в том, что первый параметр передается в методе connectionFromPromisedArray. то есть: CustomerModel.findOne({_id: ObjectId(args._id)})
где findOne возвращает объект, вместо этого вам нужно использовать find, чтобы получить ответ в виде массива.
Код проблемы:
resolve: (_, args) => connectionFromPromisedArray(
CustomerModel.findOne({_id: ObjectId(args._id)}), // <=== Error
args,
),
Решение проблемы:
resolve: (_, args) => connectionFromPromisedArray(
CustomerModel.find({_id: ObjectId(args._id)}), // <=== Solution
args,
),
Надеюсь, поможет:)