【发布时间】:2019-06-06 22:34:57
【问题描述】:
从 GraphQL / Node / Express / Typescript 堆栈开始,我遇到了字段参数未传递给解析器函数的问题。我有两个疑问:
用户列表:
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
}
]
}
}
显然,where() 函数上的字段参数未传递 userIsLocked。但是,以下工作:
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,并且我的查询默认显示所有用户。我无法弄清楚为什么 2 个明显相等的查询会以如此不同的方式表现。我已经搜索了 GraphQL 的文档,但我能找到的只是示例查询和一般查询结构。
【问题讨论】:
标签: node.js graphql graphql-js