gpt4 book ai didi

javascript - Apollo GraphQL : Augment instead of overriding default resolver behaviour

转载 作者:行者123 更新时间:2023-12-02 23:07:31 25 4
gpt4 key购买 nike

在 Apollo Server 文档中,它描述了 default resolver 的行为,这非常方便。

我还从其他地方收集到(如果我记得的话,另一个问题),您可以通过将 fieldResolver 函数传递到 apollo-server 实例的选项中,用自己的解析器函数覆盖默认解析器函数:

const server = new ApolloServer({ typeDefs, resolvers,
fieldResolver: function (source, args, context, info) {
console.log("Field resolver triggered!")
return null;
}
});

我想做的是增强默认行为,而不是覆盖它。具体来说,我正在与一个 REST API 集成,该 API 以蛇形命名法返回字段,而我的架构则尝试遵循使用驼峰命名法作为字段名称的建议约定。我想将此字段名称转换包装在默认解析器行为周围,而不必重新编写它。

或者,如果有人可以向我指出默认解析器实现的源位置,我很乐意接受并对其进行调整!

最佳答案

默认解析器可通过 graphql 模块获得:

const { defaultFieldResolver } = require('graphql')

但是,将字段从蛇形大小写转换为驼峰大小写可以在不调用默认解析器的情况下完成:

someField: (parent) => parent.some_field

如果你想创建一个可重用的解析器函数,你可以这样做:

const camelCaseResolver = (parent, args, ctx, info) => {
return parent[_.snakeCase(info.fieldName)]
}

或者更好的是,将逻辑提取到 schema directive 中:

class SnakeCaseDirective extends SchemaDirectiveVisitor {
visitFieldDefinition(field) {
field.resolve = async function (parent, args, ctx, info) {
return parent[_.snakeCase(info.fieldName)]
}
}
}

关于javascript - Apollo GraphQL : Augment instead of overriding default resolver behaviour,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57518173/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com