【问题标题】:GraphQL conditional required field directiveGraphQL 条件必填字段指令
【发布时间】:2019-03-01 10:15:18
【问题描述】:

我的大部分输入验证都在 GraphQL 层可用。如果其他字段具有特定值,我想通过使某些字段成为必需的来增强它。我认为使用自定义指令可能会做到这一点,但经过一番涉猎后,我仍然不确定。 是否可以在字段指令中访问同级字段的值?

【问题讨论】:

    标签: graphql


    【解决方案1】:

    如果没有更多上下文,很难判断这是否适合您的特定场景,但希望这会有所帮助:

    你的指令会是这样的:

    export class MyDirective extends SchemaDirectiveVisitor {
      visitFieldDefinition(field) {
        const { resolve = defaultFieldResolver } = field;
        const directiveArgs = { ...this.args };
        field.resolve = async function(obj, args, context, info) {
        ...
    

    您可以从那里通过访问 obj.

    例如对于具有以下内容的架构:

    type MyType {
      foo: String
      bar: String @MyDirective
    }
    

    您可以通过以下方式在指令中抛出错误解析栏:

    export class MyDirective extends SchemaDirectiveVisitor {
      visitFieldDefinition(field) {
        const { resolve = defaultFieldResolver } = field;
        const directiveArgs = { ...this.args };
        field.resolve = async function(obj, args, context, info) {
        let result = resolve.call(this, result, args, context, info);
        if (obj.foo === "something" && result === null) throw new Error("Some error");
        return result
    

    【讨论】:

    • 这用于返回类型。我想验证输入类型:]
    猜你喜欢
    • 2017-10-27
    • 1970-01-01
    • 2016-02-14
    • 1970-01-01
    • 2019-03-15
    • 2021-08-27
    • 2016-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多