Ошибки, возникшие в пользовательской директиве graphql, не были обнаружены в исключении useGlobalFilters

#typescript #graphql #nestjs #apollo #apollo-server

Вопрос:

У меня есть приложение GraphQL Nest, в котором у меня есть пользовательская директива аутентификации, которая проверяет, может ли поле быть извлечено ролью пользователя. Если этого не произойдет, это приведет к запрещенной ошибке.

Я также использовал useGlobalFilters метод приложения nest для регистрации глобального обработчика исключений для ведения журнала, но функция не вызывается, когда эта директива выдает ошибку

Директива

 export class AuthorizeDirective extends SchemaDirectiveVisitor {
  visitFieldDefinition(field: GraphQLField<any, any>) {
    const { resolve = defaultFieldResolver } = field;

    field.resolve = async function(...args) {
      const [, queryArgs, ctx ] = args;
      let isAuthorized = false;
      if (accessCheckClass) {
        const instance: IAccessCheck = new AccessCheckClass();
        const result = instance.checkAccess(queryArgs, ctx);
        isAuthorized = resu<
        if (result instanceof Promise) {
           isAuthorized = await resu<
        }
      }

      if (isAuthorized) {
        return resolve.apply(this, args);
      }
      
    

      throw new ForbiddenError('Permission denied');
        
    };
  }
}
 

main.ts

 app.useGlobalFilters(new AllExceptionsFilter()); --- AllExceptionsFilter.catch not getting called
 

Ошибка, выданная пользователю

 {
  "errors": [
    {
        "message": "permission denied",
        "locations": [
            {
                "line": 2,
                "column": 5
            }
        ],
        "path": [
            ""
        ],
        "extensions": {
            "code": "FORBIDDEN",
            "exception": {
                "stacktrace": [
                ]     
            }
        }
    }
  ],
  "data": {
    "data": null
  }
}
 

Комментарии:

1. Как проявляются ошибки?

2. Добавили ошибку, выданную пользователю @JayMcDoniel