Express 图形ql字段';s解析程序未被调用

Express 图形ql字段';s解析程序未被调用,express,graphql,apollo-server,Express,Graphql,Apollo Server,我正在使用apollo服务器,并在浏览器中使用GraphiQL进行测试。我在阿波罗的基础上设置了分解器,但是“review.extraStuff”字段上的分解器从未被调用 分解器 模式 来自GraphiQL的查询结果 附加信息 我知道阿波罗知道我的extraStuff解析器,因为如果我将“requireResolversForNonScalar”设置为true,我不会收到一条消息告诉我extraStuff缺少解析函数。我在模式和apolloExpress中间件中都添加了日志记录,但没有学到任何

我正在使用apollo服务器,并在浏览器中使用GraphiQL进行测试。我在阿波罗的基础上设置了分解器,但是“review.extraStuff”字段上的分解器从未被调用

分解器 模式 来自GraphiQL的查询结果

附加信息
我知道阿波罗知道我的extraStuff解析器,因为如果我将“requireResolversForNonScalar”设置为true,我不会收到一条消息告诉我extraStuff缺少解析函数。我在模式和apolloExpress中间件中都添加了日志记录,但没有学到任何东西。

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

以下是我解决问题的方法:

解析器
在我的模式中或其他任何地方都不需要进行任何更改。

extrastuff是一个字符串,因此是一个scalarSo,你是说“requireResolversForNonScalar”不会捕获它吗?那是有道理的。@w00t不想详细说明一下吗?我正在浏览graphql工具源代码,因为我的问题似乎在makeExecutableSchema中。看起来标量场的处理方式有所不同,但我仍然不清楚我的确切问题是什么。尝试将该场设置为对象,看看是否可以这样工作?不幸的是,我还没有真正尝试过graphql工具:)
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
    }
`;
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
};