在GraphQL查询中查询枚举数组时遇到一些问题。我期望该数组或权限将根据类型与用户一起返回
很遗憾,当我在操场上(对于我的Prisma或Apollo-Server服务器)进行相同的查询时,我确实取回了阵列。
我的查询如下:
const user = await ctx.db.query.user({
where: {
id: ctx.userId
}
});
我的类型定义如下:
type User {
id: ID! @id
name: String!
email: String! @unique
password: String!
club: String!
permissions: [Permission!]! @scalarList(strategy: RELATION)
createdAt: DateTime! @createdAt
updatedAt: DateTime! @updatedAt
}
权限类似
enum Permission {
ADMIN
CLUB_ADMIN
USER
FRIEND
}
我还没有包括我的查询解析器,因为我刚刚使用“ forward-to”将其转发到数据库。
但是用户的CL是
{ id: 'cjxm9ohfqvkvh0b5963iy734i',
name: 'BERTIE BOBBINS',
email: 'BERTIE@DOGS.COM',
password: '$2b$10$eLPoBuuenogLabiFb4tRFu0KV7LI4LxARhHecPYVbP0qnt5VvcZ3W',
club: 'Dog Club',
createdAt: '2019-07-02T20:30:49.670Z',
updatedAt: '2019-07-02T20:30:49.670Z' }
因此不包括Permissions数组。
答案 0 :(得分:0)
Introspection系统自检类型
要查询枚举,您需要使用__Type查询解析器。
enum Permission {
ADMIN
CLUB_ADMIN
USER
FRIEND
}
查询枚举
query
{
__type(name: "Permission") {
name
enumValues {
name
}
}
}
__ type查询解析器需要name参数。此参数使您可以根据其名称在架构中搜索对象和枚举之类的项。
{
"data": {
"__type": {
"name": "Permission",
"enumValues" : [
{
name: "ADMIN"
},
{
name: "CLUB_ADMIN"
},
{
name: "USER"
},
{
name: "FRIEND"
}
]
}
}
}
这将返回枚举的名称及其所有值。 要使用这些值,请在查询枚举时将它们存储在变量中。
PermissionsList = data.__type.enumValues
如果您需要在用户对象ref this中使用枚举
如果您使用阿波罗服务器,请阅读apollo-server和graphql-tools
答案 1 :(得分:0)
我不太明白:您提到您只是使用了prisma-binding
forwardTo
函数,但随后提供了示例查询,您可以在其中使用{{ 1}}。两种情况下都有问题吗?
对于db
实例,我不知道答案。但是对于第二种情况,我也遇到了这个问题,并且能够通过将解析器函数签名中的ctx.db.query.user
对象作为查询的第二个参数传递来解决它。
forwardTo