如何在 graphql-compose 中使用自定义输入类型?
How to use custom input type in graphql-compose?
我正在使用 mongodb 和 graphql-compose-mongoose 来生成 Graphql 模式。但是,我正在添加身份验证突变,并且我想为其中一个查询添加 graphql 输入。我在文档中看到 args.filter
可以接收输入:
CityTC.addResolver({
kind: 'query',
name: 'findMany',
args: {
filter: `input CityFilterInput {
code: String!
}`,
limit: {
type: 'Int',
defaultValue: 20,
},
skip: 'Int',
// ... other args if needed
},
type: [CityTC], // array of cities
resolve: async ({ args, context }) => {
return context.someCityDB
.findMany(args.filter)
.limit(args.limit)
.skip(args.skip);
},
});
但是我没有使用任何过滤器。我想创建这样的输入:
const AuthPayloadTC = schemaComposer.createObjectTC({
name: 'AuthPayloadTC',
fields: {
jwtToken: 'String!'
}
});
AuthPayloadTC.addResolver({
name: 'userConnectData',
type: AuthPayloadTC,
args: `input {
accessToken String!
provider String!
}`,
resolve: async ({ source, args, context, info }) => {
const { accessToken, provider } = args;
return {
jwtToken: '12345678'
}
}
})
这不起作用,因为我的输入没有被解析为 args
字段期望的那种对象。我确实注意到 graphql-compose 公开了 InputTypeComposer 但是我没有任何关于如何在解析器中使用它的示例。
通过反复试验,我发现了这一点:
import { schemaComposer, toInputObjectType } from 'graphql-compose'
const InputTC = schemaComposer.createObjectTC({
name: 'UserConnectDataInput',
fields: {
accessToken: 'String!'
}
});
const InputITC = toInputObjectType(InputTC);
AuthPayloadTC.addResolver({
name: 'userConnectData',
type: AuthPayloadTC,
args: {
input: InputITC
},
resolve: async ({ source, args, context, info }) => {
const { accessToken, provider, email } = args;
return {
jwtToken: '12345678'
}
}
})
我正在使用 mongodb 和 graphql-compose-mongoose 来生成 Graphql 模式。但是,我正在添加身份验证突变,并且我想为其中一个查询添加 graphql 输入。我在文档中看到 args.filter
可以接收输入:
CityTC.addResolver({
kind: 'query',
name: 'findMany',
args: {
filter: `input CityFilterInput {
code: String!
}`,
limit: {
type: 'Int',
defaultValue: 20,
},
skip: 'Int',
// ... other args if needed
},
type: [CityTC], // array of cities
resolve: async ({ args, context }) => {
return context.someCityDB
.findMany(args.filter)
.limit(args.limit)
.skip(args.skip);
},
});
但是我没有使用任何过滤器。我想创建这样的输入:
const AuthPayloadTC = schemaComposer.createObjectTC({
name: 'AuthPayloadTC',
fields: {
jwtToken: 'String!'
}
});
AuthPayloadTC.addResolver({
name: 'userConnectData',
type: AuthPayloadTC,
args: `input {
accessToken String!
provider String!
}`,
resolve: async ({ source, args, context, info }) => {
const { accessToken, provider } = args;
return {
jwtToken: '12345678'
}
}
})
这不起作用,因为我的输入没有被解析为 args
字段期望的那种对象。我确实注意到 graphql-compose 公开了 InputTypeComposer 但是我没有任何关于如何在解析器中使用它的示例。
通过反复试验,我发现了这一点:
import { schemaComposer, toInputObjectType } from 'graphql-compose'
const InputTC = schemaComposer.createObjectTC({
name: 'UserConnectDataInput',
fields: {
accessToken: 'String!'
}
});
const InputITC = toInputObjectType(InputTC);
AuthPayloadTC.addResolver({
name: 'userConnectData',
type: AuthPayloadTC,
args: {
input: InputITC
},
resolve: async ({ source, args, context, info }) => {
const { accessToken, provider, email } = args;
return {
jwtToken: '12345678'
}
}
})