Схема GraphQL для запросов объектов фильтра плагина vuex-orm

Попытка заставить фильтрацию объектов работать с apolo-server и vuex-orm-graphql.

Куча:

  • Бэкэнд: nodejs, apollo-server
  • Внешний интерфейс: vue / vuex-orm + vuex-orm-graphql- плагин. Приложение реализует .fetch() в соответствии с объектом фильтра, как описано в документации:
Comment.fetch({ postId: '15', deleted: false });

Я не могу заставить клиента отправить запрос, потому что я не знаю, как определить схему запроса для случая объекта фильтра.

Пробовал несколько подходов, например:

input FilterObject {
  postId: String
  deleted: Boolean
}

type query {
  comments(filter: FilterObject)
}

Запрос запроса graphql не отправляется, ошибка:

"Cannot query field \"nodes\" on type \"Comments\"."

Если я немного изменю схему, я могу получить запрос для отправки, однако он будет ошибаться в том, что тип поля filter неверен.

Как должна быть определена схема, чтобы функция фильтра работала?


person tivoni    schedule 28.06.2021    source источник


Ответы (1)


Обновлять:

Я не уверен, что это лучший способ достичь цели, но я обнаружил, что использование концепции «курсора» решает проблему.

Я определил тип ввода «фильтр», который содержит поля фильтрации.

Затем для вывода запроса есть новый тип курсора, который содержит поле «узлы». Обратите внимание, что поле узлов - это массив запрашиваемого типа.

В итоге получается что-то вроде этого:

input ConfigFilter {
    services: [String]!
}
type ConfigCursor {
    cursor: String!
    nodes: [Config!]
}
type Config {
    id: ID!
    service: String!
    data: Blackbox
}

Как уже указывалось, я обнаружил и подтвердил, что протестировал эту работу с vuex-orm и связанным с ним плагином graphql.

Надеюсь, это поможет!

person tivoni    schedule 05.07.2021