GraphQL条件必填字段指令

时间:2018-09-25 17:51:22

标签: graphql

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

1 个答案:

答案 0 :(得分:0)

在没有更多上下文的情况下很难说这是否适合您的特定情况,但希望这会有所帮助:

您的指令将具有以下内容:

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