Начиная со стека GraphQL / Node / Express / Typescript, я сталкиваюсь с проблемой, когда аргументы поля не передаются функции распознавателя. У меня есть два запроса:
UserList:
UserList: {
type: new GraphQLList(UserType),
args: {
userName: {
type: GraphQLString
},
userIsLocked: {
type: GraphQLBoolean
},
userIsConfirmed: {
type: GraphQLBoolean
},
userAwaitingPassword: {
type: GraphQLBoolean
}
},
resolve: ((_, {fields}) => new User().where({fields}))
}
И пользователь:
User: {
type: UserType,
args: {
userId: {
type: GraphQLID
}
},
resolve: ((_, {userId}) => new User().getById({userId}))
}
Функция User().where()
по умолчанию отображает всех пользователей, если не указан критерий. Однако рассмотрим следующий запрос и результаты:
query All {
UserList(userIsLocked:true){
userId
userName
userIsLocked
}
}
// Results
{
"data": {
"UserList": [
{
"userId": "a4f1d968-52d6-4148-bf62-1e132a4defde",
"userName": "user1",
"userIsLocked": false
},
{
"userId": "b42a1170-096a-11e9-b568-0800200c9a66",
"userName": "administrator",
"userIsLocked": false
}
]
}
}
Очевидно, что userIsLocked не передается аргумент fields в функции where()
. Тем не менее, следующие работы:
query Individual {
User(userId: "a4f1d968-52d6-4148-bf62-1e132a4defde") {
userId
userName
userIsLocked
}
}
// Results
{
"data": {
"User": {
"userId": "a4f1d968-52d6-4148-bf62-1e132a4defde",
"userName": "user1",
"userIsLocked": false
}
}
}
Когда userId
регистрируется по запросу к getById()
, я вижу {"userId":"a4f1d968-52d6-4148-bf62-1e132a4defde"}
в консоли. Но когда fields
регистрируется по запросу к where()
, все, что отображается в консоли, это undefined
, и мой запрос по умолчанию отображает всех пользователей. Я не могу понять, почему два, по-видимому, равных запроса будут вести себя по-разному. Я изучил документацию по GraphQL, но все, что я могу найти, это примеры запросов и общая структура запросов.