Передайте аргумент ввода Graphql в директиву - PullRequest
0 голосов
/ 07 мая 2020

У меня есть простой запрос graphql и директива

directive @isOwner(postID: String!) on FIELD_DEFINITION

type Query {
  post(postID: String!): Post! @isOwner(postID: postID)
}

Проблема в том, что я использую GQLGen для генерации моего шаблонного кода для Go, и директивы обрабатываются отличается от входных значений. Это представляет собой уникальную проблему, когда авторизация logi c почти изолирована от фактического чтения db, что делает logi c очень неэффективным, поскольку мне приходится либо делать чтение базы данных дважды: во время проверки и фактического чтения db. Данные, необходимые для проверки, также требуются для чтения db, и мне пришлось бы отредактировать весь мой код, чтобы вставить эти данные в контекст. Есть ли способ динамически передавать аргументы ввода в директиву и выполнять проверку динамически, и является ли это хорошей практикой в ​​первую очередь?

1 Ответ

1 голос
/ 07 мая 2020

Аргументы, переданные в директивы схемы, оцениваются при первоначальном построении схемы, поэтому они не могут быть динамическими c. В этом конкретном случае вам вообще не нужен аргумент - вы можете просто прочитать значение поля аргументов.

visitFieldDefinition(field) {
  const { resolve = defaultFieldResolver } = field
  field.resolve = async function (parent, args, context, info) {
    console.log(args.postID)    

    return resolve.apply(this, [parent, args, context, info])
  }
}

Однако, если имя аргумента зависит от поля, тогда вы можете передать , что в качестве аргумента вашей директивы

directive @isOwner(argName: String!) on FIELD_DEFINITION
visitFieldDefinition(field) {
  const { resolve = defaultFieldResolver } = field
  const { argName } = this.args
  field.resolve = async function (parent, args, context, info) {
    console.log(args[argName])    

    return resolve.apply(this, [parent, args, context, info])
  }
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...