Получить список запрашиваемых ключей в запросе NestJS / GraphQL - PullRequest
0 голосов
/ 25 октября 2019

Я просто пытаюсь понять, поэтому мои типы не точны.

@Resolver()
export class ProductsResolver {
    @Query(() => [Product])
    async products() {
        return [{
            id: 55,
            name: 'Moonshine',
            storeSupplies: {
                London: 25,
                Berlin: 0,
                Monaco: 3,
            },
        }];
    }
}

Если я запрашиваю данные с запросом ниже

{
    products{
      id,
      name,
    }
}

Я хочу, чтобы async carriers()получить ['id', 'name']. Я хочу пропустить получение storeSupplies, поскольку это может быть дорогой вызов SQL.


Я новичок в GraphQL, возможно, я пропустил что-то очевидное или даже целые шаблоны. Заранее спасибо.

1 Ответ

0 голосов
/ 30 октября 2019


По сути, вы можете разделять StoreSupplies запросы, чтобы не получать их при запросе по продуктам.
Вы также можете получить запрошенные ключи в своем преобразователе, а затем выполнять запросы на основе их. Чтобы сделать это, вы можете определить декоратор параметров следующим образом:

import { createParamDecorator } from '@nestjs/common';

export const Info = createParamDecorator(
  (data, [root, args, ctx, info]) => info,
);

Затем используйте его в вашем резольвере следующим образом:

  @UseGuards(GqlAuthGuard)
  @Query(returns => UserType)
  async getMe(@CurrentUser() user: User, @Info() info): Promise<User> {
    console.log(
      info.fieldNodes[0].selectionSet.selections.map(item => item.name.value),
    );
    return user;
  }

Например, когда вы запускаете этот запрос

{
  getMe{
    id
    email
    roles
  }
}

Выход console.log:

[ 'id', 'email', 'roles' ]
...