我对如何在graphql-compose中正确创建解析器感到困惑:我有两个相关的实体:entityGroup和entity。我想每次创建一个EntityGroup时都创建一个默认实体:所以我需要调用 EntityGroup.createOne 的resolve方法,然后使用该结果的ID来调用“ Entity.createOne”
这是我到目前为止编写的代码:
import { composeWithMongoose } from 'graphql-compose-mongoose';
import { schemaComposer } from 'graphql-compose';
import {Resolver} from 'graphql-compose'
const customizationOptions = {}; // left it empty for simplicity, described below
const EntityTC = composeWithMongoose(Entity, customizationOptions)
const EntityGroupTC = composeWithMongoose(EntityGroup, customizationOptions)
const entityGroupCreate = new Resolver({
name: 'entityGroupCreate',
type: EntityGroupTC,
args: {
name: 'String!',
},
resolve: async ({ source, args, context, info }) => {
const created = await EntityGroupTC.getResolver('createOne').resolve({ source, args, context, info })
console.log("created entity : ", created)
return created
}
});
schemaComposer.rootMutation().addFields({
entityGroupCreate,
}
现在从客户端来看,我调用了与原始情况相同的代码,其中EntityGroupCreate使用了预先存在的解析器:
schemaComposer.rootMutation().addFields({
entityGroupCreate: EntityGroupTC.getResolver('createOne'),
}
我的问题是,对于预定义的解析器来说一切正常,但是在上面描述的解析器中,出现了此错误:
graphQl错误:字段上的未知参数“记录” 类型为“静音”的“ entityGroupCreate”。 graphQl错误:无法查询 类型为“ EntityGroup”的字段“ recordId”。 graphQl错误:无法查询 类型为“ EntityGroup”的字段“ record”。 graphQl错误:字段 类型为“字符串!”的“ entityGroupCreate”参数“ name”是必需的,但 没有提供。
这是我的查询
const ADD_COMPLAINT = gql`mutation complaintCreate($entityId:String!, $title: String!, $desc: String!)
{
complaintCreate(record:{entityId:$entityId, title:$title, desc:$desc}){
recordId,
record{
_id,
entityId,
user {
userId,
userName,
roleInShop
},
title,
desc,
createdAt,
updatedAt
}
}
}`
现在我知道突变模式是错误的,但是我真的不知道从哪里开始,因为该模式是由graphql-compose-mongoose构造的,我可以简单地在解析器的type字段中命名它:类型:EntityGroupTC
我尝试重新定义注释中指定的响应格式:
const outputType = EntityGroupTC.constructor.schemaComposer.getOrCreateTC("entityGroupCreate", t => {
t.addFields({
recordId: {
type: 'MongoID',
description: 'Created document ID',
},
record: {
type: EntityGroupTC,
description: 'Created document',
},
});
});
但是我仍然有这些错误
graphQl错误:字段上的未知参数“记录” 类型为“静音”的“ entityGroupCreate”。 graphQl错误:字段 类型为“字符串!”的“ entityGroupCreate”参数“ name”是必需的,但 没有提供。
所以我必须了解这部分的工作原理:https://github.com/graphql-compose/graphql-compose-mongoose/blob/master/src/resolvers/createOne.js:42
args: {
...recordHelperArgs(tc, {
recordTypeName: `CreateOne${tc.getTypeName()}Input`,
removeFields: ['id', '_id'],
isRequired: true,
...(opts && opts.record),
}),
},
我认为对于一个应该编写较少接线代码的库来说,这注定会变得复杂:我敢肯定我做错了方法...
最诚挚的问候,
答案 0 :(得分:0)
好,解决方案就在我眼前:/,这是一天结束的综合症
const createOneResolver = EntityGroupTC.getResolver('createOne')
const entityGroupCreate = new Resolver({
name: 'entityGroupCreate',
type: createOneResolver.type,
args: createOneResolver.args,
resolve: async ({ source, args, context, info }) => {
const created = await createOneResolver.resolve({ source, args, context, info })
console.log("created entity : ", created)
return created
}
});