Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Graphql 阿波罗号错误指令呼叫_Graphql_Apollo - Fatal编程技术网

Graphql 阿波罗号错误指令呼叫

Graphql 阿波罗号错误指令呼叫,graphql,apollo,Graphql,Apollo,对于userPasswordChange出于某种原因而进行的变异,将调用minGroupdirectiveidisowneromingroup。什么是问题 export const typeDefs = gql` directive @minGroup(requires: Group = ADMINS) on OBJECT | FIELD_DEFINITION directive @idIsOwnerOrMinGroup(requires: Group = ADMINS) on OBJE

对于
userPasswordChange
出于某种原因而进行的变异,将调用
minGroup
directive
idisowneromingroup
。什么是问题

export const typeDefs = gql`
  directive @minGroup(requires: Group = ADMINS) on OBJECT | FIELD_DEFINITION
  directive @idIsOwnerOrMinGroup(requires: Group = ADMINS) on OBJECT | FIELD_DEFINITION

type Mutation {
   userPasswordChange(oldPassword: String, newPassword: String!, id: Int!): Boolean! @idIsOwnerOrMinGroup(requires: ADMINS)
}`


import { MinGroupDirective } from '../directives/minGroupDirective'
import { IdIsOwnerOrMinGroupDirective } from '../directives/IdIsOwnerOrMinGroupDirective'

export const schemaDirectives = {
  minGroup: MinGroupDirective,
  idIsOwnerOrMinGroup: IdIsOwnerOrMinGroupDirective,
} as any

export const schema = makeExecutableSchema({
  typeDefs,
  resolvers,
  schemaDirectives,
})

type MinGroupRequired = { _minGroup?: AccessGroup }
type MinGroupAvoidRewrap = { _minGroupAvoidRewrap?: true }

export class MinGroupDirective extends SchemaDirectiveVisitor {
  visitObject(type: GraphQLObjectType & MinGroupRequired): void {
    this.ensureFieldsWrapped(type)
    type._minGroup = this.args.requires
  }
  // Visitor methods for nested types like fields and arguments
  // also receive a details object that provides information about
  // the parent and grandparent types.
  visitFieldDefinition(
    field: GraphQLField<any, any> & MinGroupRequired,
    details: {
      field: GraphQLField<any, any>
      objectType: GraphQLObjectType | GraphQLInterfaceType
    }
  ): void {
    this.ensureFieldsWrapped(details.objectType)
    field._minGroup = this.args.requires
  }

  ensureFieldsWrapped(objectType: (GraphQLObjectType | GraphQLInterfaceType) & MinGroupRequired & MinGroupAvoidRewrap): any {
    // Mark the GraphQLObjectType object to avoid re-wrapping:
    if (objectType._minGroupAvoidRewrap) return
    objectType._minGroupAvoidRewrap = true

    const fields = objectType.getFields()

    Object.keys(fields).forEach((fieldName) => {
      const field = fields[fieldName] as GraphQLField<any, any, any> & MinGroupRequired
      const { resolve = defaultFieldResolver } = field

      field.resolve = async function (...args): Promise<any> {
        // Get the required Group from the field first, falling back
        // to the objectType if no Group is required by the field:
        const requiredGroup = field._minGroup || objectType._minGroup

        if (!requiredGroup) return resolve.apply(this, args)

        const ctx: Ctx<CtxUserAny> = args[2]

        if (minGroupCheck(ctx.user.access_group, requiredGroup)) return resolve.apply(this, args)

        throw genGqlError('')
      }
    })
  }
}


type MinGroupRequired = { _minGroup?: AccessGroup }
type MinGroupAvoidRewrap = { _minGroupAvoidRewrap?: true }

export class IdIsOwnerOrMinGroupDirective extends SchemaDirectiveVisitor {
  visitObject(type: GraphQLObjectType & MinGroupRequired): void {
    this.ensureFieldsWrapped(type)
    type._minGroup = this.args.requires
  }
  // Visitor methods for nested types like fields and arguments
  // also receive a details object that provides information about
  // the parent and grandparent types.
  visitFieldDefinition(
    field: GraphQLField<any, any> & MinGroupRequired,
    details: {
      field: GraphQLField<any, any>
      objectType: GraphQLObjectType | GraphQLInterfaceType
    }
  ): void {
    this.ensureFieldsWrapped(details.objectType)
    field._minGroup = this.args.requires
  }

  ensureFieldsWrapped(objectType: (GraphQLObjectType | GraphQLInterfaceType) & MinGroupRequired & MinGroupAvoidRewrap): any {
    // Mark the GraphQLObjectType object to avoid re-wrapping:
    if (objectType._minGroupAvoidRewrap) return
    objectType._minGroupAvoidRewrap = true

    const fields = objectType.getFields()

    Object.keys(fields).forEach((fieldName) => {
      const field = fields[fieldName] as GraphQLField<any, any, any> & MinGroupRequired
      const { resolve = defaultFieldResolver } = field

      field.resolve = async function (...args): Promise<any> {
        // Get the required Group from the field first, falling back
        // to the objectType if no Group is required by the field:
        const requiredGroup = field._minGroup || objectType._minGroup

        if (!requiredGroup) return resolve.apply(this, args)

        const ctx: Ctx<CtxUserAny> = args[2]
        const { id }: { id: number } = args[1]

        if (minGroupCheck(ctx.user.access_group, requiredGroup) || (id && id === (ctx.user as Ctx['user'])?.id))
          return resolve.apply(this, args)

        throw genGqlError('')
      }
    })
  }
}
导出常量typeDefs=gql` 对象|字段_定义上的指令@minGroup(要求:Group=ADMINS) 对象|字段(u定义)上的指令@IDISowneromingGroup(要求:Group=ADMINS) 类型突变{ userPasswordChange(旧密码:String,新密码:String!,id:Int!):Boolean!@IDISownerOrmingGroup(需要:ADMINS) }` 从“../directions/MinGroupDirective”导入{MinGroupDirective} 从“../directives/IDISownerOrmingGroupDirective”导入{IDISownerOrmingGroupDirective} 导出常量schemaDirectives={ minGroup:minGroup指令, IDISownerOrmingGroup:IDISownerOrmingGroup指令, }一样 export const schema=makeExecutableSchema({ typeDefs, 解析器, 方案修正, }) 类型MinGroupRequired={U minGroup?:AccessGroup} 键入MinGroupAvoidRewrap={u MinGroupAvoidRewrap?:true} 导出类MinGroupDirective扩展了SchemaDirectiveVisitor{ visitObject(类型:GraphQLObjectType&MinGroupRequired):void{ 此。确保焊接已搭接(类型) type.\u minGroup=this.args.requires } //字段和参数等嵌套类型的访问者方法 //还接收一个详细信息对象,该对象提供有关 //父母和祖父母类型。 visitFieldDefinition( 字段:GraphQLField&MinGroupRequired, 详情:{ 字段:GraphQLField objectType:GraphQLObjectType | GraphQLInterfaceType } ):无效{ this.ensureFeldsWrapped(details.objectType) 字段。\u minGroup=this.args.requires } EnsureRefieldSwrapped(objectType:(GraphQLObjectType | GraphQLInterfaceType)&MinGroupRequired&MinGroupAvoidRewrap):任意{ //标记GraphQLObjectType对象以避免重新包装: if(objectType.\u minGroupAvoidRewrap)返回 objectType.\u minGroupAvoidRewrap=true const fields=objectType.getFields() Object.key(fields).forEach((fieldName)=>{ const field=字段[fieldName]作为图形qlfield&MinGroupRequired 常量{resolve=defaultFieldResolver}=field field.resolve=异步函数(…args):承诺{ //首先从字段中获取所需的组,然后返回 //如果该字段不需要任何组,则添加到objectType: const requiredGroup=字段。_minGroup | | objectType。_minGroup 如果(!requiredGroup)返回resolve.apply(此参数) 常量ctx:ctx=args[2] if(minGroupCheck(ctx.user.access_group,requiredGroup))返回resolve.apply(this,args) 抛出genGqlError(“”) } }) } } 类型MinGroupRequired={U minGroup?:AccessGroup} 键入MinGroupAvoidRewrap={u MinGroupAvoidRewrap?:true} 导出类IDisownerOrmingGroupDirective扩展了SchemaDirectiveVisitor{ visitObject(类型:GraphQLObjectType&MinGroupRequired):void{ 此。确保焊接已搭接(类型) type.\u minGroup=this.args.requires } //字段和参数等嵌套类型的访问者方法 //还接收一个详细信息对象,该对象提供有关 //父母和祖父母类型。 visitFieldDefinition( 字段:GraphQLField&MinGroupRequired, 详情:{ 字段:GraphQLField objectType:GraphQLObjectType | GraphQLInterfaceType } ):无效{ this.ensureFeldsWrapped(details.objectType) 字段。\u minGroup=this.args.requires } EnsureRefieldSwrapped(objectType:(GraphQLObjectType | GraphQLInterfaceType)&MinGroupRequired&MinGroupAvoidRewrap):任意{ //标记GraphQLObjectType对象以避免重新包装: if(objectType.\u minGroupAvoidRewrap)返回 objectType.\u minGroupAvoidRewrap=true const fields=objectType.getFields() Object.key(fields).forEach((fieldName)=>{ const field=字段[fieldName]作为图形qlfield&MinGroupRequired 常量{resolve=defaultFieldResolver}=field field.resolve=异步函数(…args):承诺{ //首先从字段中获取所需的组,然后返回 //如果该字段不需要任何组,则添加到objectType: const requiredGroup=字段。_minGroup | | objectType。_minGroup 如果(!requiredGroup)返回resolve.apply(此参数) 常量ctx:ctx=args[2] 常量{id}:{id:number}=args[1] if(minGroupCheck(ctx.user.access_group,requiredGroup)| |(id&&id==(ctx.user作为ctx['user'])?.id)) 返回resolve.apply(此参数为args) 抛出genGqlError(“”) } }) } }
似乎他们每次都会呼叫,不确定原因。在我将directive从
字段更改为
类型之后,问题就解决了。但我想看看解释

type MinGroupOrOwnerRequired = { _minGroupOrOwner?: AccessGroup }
type MinGroupOrOwnerAvoidRewrap = { _minGroupOrOwnerAvoidRewrap?: true }

export class IdIsOwnerOrMinGroupDirective extends SchemaDirectiveVisitor {
  visitObject(type: GraphQLObjectType & MinGroupOrOwnerRequired): void {
    this.ensureFieldsWrapped(type)
    type._minGroupOrOwner = this.args.requires
  }
  // Visitor methods for nested types like fields and arguments
  // also receive a details object that provides information about
  // the parent and grandparent types.
  visitFieldDefinition(
    field: GraphQLField<any, any> & MinGroupOrOwnerRequired,
    details: {
      field: GraphQLField<any, any>
      objectType: GraphQLObjectType | GraphQLInterfaceType
    }
  ): void {
    this.ensureFieldsWrapped(details.objectType)
    field._minGroupOrOwner = this.args.requires
  }

  ensureFieldsWrapped(objectType: (GraphQLObjectType | GraphQLInterfaceType) & MinGroupOrOwnerRequired & MinGroupOrOwnerAvoidRewrap): any {
    // Mark the GraphQLObjectType object to avoid re-wrapping:
    if (objectType._minGroupOrOwnerAvoidRewrap) return
    objectType._minGroupOrOwnerAvoidRewrap = true

    const fields = objectType.getFields()

    Object.keys(fields).forEach((fieldName) => {
      const field = fields[fieldName] as GraphQLField<any, any, any> & MinGroupOrOwnerRequired
      const { resolve = defaultFieldResolver } = field

      field.resolve = async function (...args): Promise<any> {
        // Get the required Group from the field first, falling back
        // to the objectType if no Group is required by the field:
        const requiredGroup = field._minGroupOrOwner || objectType._minGroupOrOwner

        if (!requiredGroup) return resolve.apply(this, args)

        const ctx: Ctx<CtxUserAny> = args[2]
        const { id }: { id: number } = args[1]

        if (minGroupCheck(ctx.user.access_group, requiredGroup) || (id && id === (ctx.user as Ctx['user'])?.id))
          return resolve.apply(this, args)

        throw genGqlError('')
      }
    })
  }
}
type MinGroupOrOwnerRequired={u minGroupOrOwner?:AccessGroup}
类型MinGroupOrOwnerAvoidRewrap={u MinGroupOrOwnerAvoidRewrap?:true}
导出类IDisownerOrmingGroupDirective扩展了SchemaDirectiveVisitor{
visitObject(类型:GraphQLObjectType&MinGroupOrOwnerRequired):无效{
此。确保焊接已搭接(类型)
类型。_minGroupOrOwner=this.args.requires
}
//字段和参数等嵌套类型的访问者方法
//还接收一个详细信息对象,该对象提供有关
//父母和祖父母类型。
visitFieldDefinition(
字段:需要GraphQLField和MingrouporOwner,
详情:{
字段:GraphQLField
objectType:GraphQLObjectType | GraphQLInterfaceType
}
):无效{
this.ensureFeldsWrapped(details.objectType)
字段。\u minGroupOrOwner=this.args.requires
}
确保覆盖(对象类型:(GraphQLObjectType | GraphQLInterfaceType)&MinGroupOrOwnerRequired&MingrouporOwnerRavoidRewrap):任何{
//标记GraphQLObjectType对象以避免重新包装:
if(objectType.\u minGroupOrOwnerAvoidRewrap)返回
objectType.\u minGroupOrOwnerAvoidRewrap=true
const fields=objectType.get