3

我正在使用 apollo-server 并在浏览器中使用 GraphiQL 进行测试。我根据 Apollo 的GitHunt-API 示例设置了我的解析器,但是“review.extraStuff”字段上的解析器永远不会被调用。

解析器

const rootResolvers = {
    review(root, args, context) {
        console.log('resolving review');
        return {'HasErrors': true}
    }
}

const extraStuff = (root, args, context) => {
    console.log('resolving extraStuff');
    return "yes";
}

rootResolvers.review.extraStuff = extraStuff;

export default {
    RootQuery: rootResolvers
};

架构

const Review = `
    type Review {
        HasErrors: Boolean
        extraStuff: String
    }
`

const RootQuery = `
    type RootQuery {
        review(id: String!): Review
    }
`;

const SchemaDefinition = `
    schema {
        query: RootQuery
    }
`;

来自 GraphiQL 的查询结果

来自 GraphiQL 的查询结果

附加信息

我知道 Apollo 知道我的 extraStuff 解析器,因为如果我将“requireResolversForNonScalar”设置为 true,我不会收到消息告诉我 extraStuff 缺少解析函数。我已将日志记录添加到模式和 apolloExpress 中间件中,但什么也没学到。

4

1 回答 1

5

我的问题是我不明白您传递给makeExecutableSchema(来自 graphql-tools)的解析器需要将您的所有类型映射到它们自己的解析器。换句话说,每种类型都应该在传递给makeExecutableSchema的解析器对象中具有一个顶级条目。

这是我解决问题的方法:

解析器

const rootResolvers = {
    review(root, args, context) {
        console.log('resolving review');
        return {'HasErrors': true}
    }
}

const reviewResolvers = {
    extraStuff(root, args, context) {
        console.log('resolving extraStuff');
        return "yes";
    }
}

export default {
    RootQuery: rootResolvers
    Review: reviewResolvers
};

我的架构或其他任何地方都不需要更改。

于 2017-01-24T14:51:26.530 回答