【发布时间】:2019-05-18 18:28:04
【问题描述】:
我正在尝试从突变中返回一个查询类型,在某些情况下我可以使其工作,但不是我想要的方式。该问题与所使用的 Query 类型并没有特别相关,因为我发现使用 Query 以外的其他类型时会出现相同的行为。
您可以在https://codesandbox.io/s/1z8kjy8m93上运行和修改此代码
服务器
const { ApolloServer, gql } = require("apollo-server");
const typeDefs = gql`
type Query {
hello(msg: String): String
}
type Mutation {
someMutation(someArg: String): MutationResponse
}
type MutationResponse {
query: Query
status: String
}
`;
const resolvers = {
Query: {
hello: (root, args, context) => {
console.log("hello: args = ", args);
return `${args.msg}, world !`;
}
},
Mutation: {
someMutation: (root, args, context) => {
console.log("someMutation: args = ", args);
return { status: `Mute Mute: ${args.someArg}` };
}
}
};
const server = new ApolloServer({
typeDefs,
resolvers
});
server.listen().then(({ url }) => {
console.log(`???? Server ready at ${url}`);
});
变异
mutation mutateMe($mutationArg: String = "YoloMute !", $helloMsg: String = "Yolhello") {
someMutation(someArg: $mutationArg) {
status
query {
hello(msg: $helloMsg)
}
}
}
回应
{
"data": {
"someMutation": {
"status": "Mute Mute: YoloMute !",
"query": null
}
}
}
我不明白为什么不调用 hello 解析器,而 query 字段是 null。
status 字段由 someMutation 解析器适当填充,但由于 query 字段没有在那里解析,我希望 GraphQL 调用该字段的现有解析器,该字段存在并且应该为Query 类型。
我发现了其他在技术上可行但不令人满意的方法:
- 直接返回查询类型有效: https://codesandbox.io/s/ovr9zpwr7q
- 架构中的重复行 作品:https://codesandbox.io/s/l4yrqzmq6l
【问题讨论】:
标签: graphql apollo graphql-js apollo-server