graphql-tools
на самом деле включает в себя утилиту addSchemaLevelResolveFunction
, которая позволяет обернуть преобразователь для каждого поля Query
, Mutation
и Subscription
для имитации "преобразователя корневого уровня":
const{makeExecutableSchema, addSchemaLevelResolveFunction} = require ('graphql-tools')
const schema = makeExecutableSchema({ resolvers, typeDefs })
const rootLevelResolver = (root, args, context, info) => {
// Your validation logic here. Throwing an error will prevent the wrapped resolver from executing.
// Note: whatever you return here will be passed as the parent value to the wrapped resolver
}
addSchemaLevelResolveFunction(schema, rootLevelResolver)
Это простой способ применения некоторой логики ко всем полям корневого уровня, но он становится немного сложным, если есть только некоторые поля, к которым вы хотите применить эту логику.Если это так, теперь вам нужно вести список полей из белого или черного списков, отдельно от вашей схемы.Это может быть проблематично, если кто-то в вашей команде добавляет новое поле и не знает об этом механизме.Это также не слишком полезно, если вы хотите применить ту же логику к полям вне полей корневого уровня.
Лучшим подходом является использование пользовательской директивы схемы , как описано в документации .Это позволяет указать, к каким полям применять логику:
directive @customValidation on FIELD_DEFINITION
type Query {
someField: String @customValidation
someOtherField: String
}