从GraphQL/Node/Express/Types cript堆栈开始,我遇到了一个问题,即字段参数没有传递给解析器函数。我有两个查询:
用户列表:
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没有在where()
函数上传递fields参数。但是,以下工作:
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
}
}
}
当用户ID登录到对getById()的请求时,我在控制台中看到了“a4f1d968-52d6-4148-bf62-1e132a4defde”。但是,当登录到对where()的请求时,控制台中显示的所有内容都是未定义的,我的查询默认显示所有用户。我不明白为什么两个显然相等的查询会以如此不同的方式运行。我已经搜索了GraphQL的文档,但我所能找到的只是示例查询和一般查询结构。
传递给解决
函数的第二个参数是一个对象,其属性映射到该字段的参数。让我们看看工作的解析器:
resolve: (_, {userId}) => new User().getById({userId})
在这里,您使用对象解构语法从第二个参数解包userId属性,并将其签名到同名变量。然后,使用速记属性名称语法创建一个具有用户ID属性的对象(使用定义的变量值),并将此对象传递给getById方法。
这在语法上等同于以下函数:
resolve: (_, args) => {
const userId = args.userId
return new User().getById({ userId: userId })
}
从您的问题中不清楚您使用的是什么ORM,因此我无法判断您是否正确调用了其他解析器中的where
方法。但是,您绝对没有解压该字段的任何参数。这是您的函数:
resolve: (_, {fields}) => new User().where({fields})
这相当于:
resolve: (_, args) => {
const fields = args.fields
return new User().where({ fields: fields })
}
您的字段有以下四个参数:userName
、userIsLocked
、userIsConfirmed
和userAwaitingPassword
。字段
不是有效的参数,因此将始终未定义,除非您将名为字段的参数添加到您的UserList
字段并实际传递它。我要冒险猜测一下,说您的模型也没有字段
属性。如果您只是想将参数对象传递给where
方法,您可以这样做:
resolve: (_, fields) => new User().where(fields)
请注意缺少花括号。同样,您还没有告诉我们您正在使用什么ORM或用户模型本身,因此,如果您没有正确使用该API,这可能仍然无法提供所需的结果。然而,希望这能让你走上正轨。
当客户机发送请求时,我想知道客户机请求的数据字段是什么。例如 在上面的请求中,客户端请求了用户的字段和字段。在执行查询时,我如何知道/获得桑格利亚酒-graql服务器中的这些指定字段,即名称和地址?
我目前正在使用NodeJS尝试GraphQL,我不知道为什么在以下查询中出现此错误: 我不确定,如果我的是正确的,因为在任何例子中,我都看到他们使用了,但在我的情况下,我真的想返回一个用户对象,而不是用户数组。 我的代码: 错误: 因此,我的模式提供了一个字段,该字段返回正确的数据(console.log)。
例如,endpoint 因此,如果有人将以下json发送到我的endpoint,endpoint应该接受它 但如果发送以下json,则失败,因为它不包含。
介绍 model 参考文档已经介绍了如何使用 Django 的标准字段类;例如 CharField, DateField,等等。对于很多应用来说,这些类足够用了。 但是在某些情况下, 你所用的Django 不具备你需要的某些精巧功能,或是你想使用的字段与 Django 自带字段完全不同。 Django 内置的字段类型并不能覆盖所有可能遇到的数据库的列类型,仅仅是些普通的字段类型,例如VARCHAR
我很困惑如何创建一个Resolver正确地在图ql-组成:我有两个相关的实体:entityGroup和实体。我想在每次创建实体组时创建一个默认实体:所以我需要调用EntityG的解析方法roup.createOne,然后使用结果的id调用“Entity.createOne” 这是我到目前为止写的代码: 现在从客户端开始,我调用了与我在entityGroupCreate使用预退出解析程序的原始情况中
我正在努力学习GraphQL( 我只得到一级字段,比如: 以下是我的模式: 我的解析器: 知道我做错了什么吗?