Как включить поля в API-сервер и удалить его перед возвратом к результатам для клиента в Graphql

У меня есть сервер Node.js GraphQL. От клиента я пытаюсь получить все пользовательские записи, используя такой запрос:

{
    user {
        name
        entries {
            title
            body
        }
    }
}

Однако на сервере GraphQL Node.js я хочу вернуть пользовательские записи, которые в настоящее время действительны на основе publishDate а также expiryDate в объекте записей.

Например:

{
    "user": "john",
    "entries": [
        { 
          "title": "entry1",
          "body": "body1",
          "publishDate": "2019-02-12",
          "expiryDate": "2019-02-13"
        },
        { 
          "title": "entry2",
          "body": "body2",
          "publishDate": "2019-02-13",
          "expiryDate": "2019-03-01"
        },
        { 
          "title": "entry3",
          "body": "body3",
          "publishDate": "2020-01-01",
          "expiryDate": "2020-01-31"
        }
    ]
}

должен вернуть это

{
    "user": "john",
    "entries": [
        { 
          "title": "entry2",
          "body": "body2",
          "publishDate": "2019-02-13",
          "expiryDate": "2019-03-01"
        }
    ]
}

entries извлекается через delegateToSchema звоните ( https://www.apollographql.com/docs/graphql-tools/schema-delegation.html), и у меня нет возможности передавать publishDate и expiryDate в качестве параметров запроса. По сути, мне нужно получить результаты, а затем отфильтровать их в памяти.

Проблема, с которой я сталкиваюсь, заключается в том, что исходный запрос не имеет publishDate а также expiryDate в этом, чтобы поддержать это. Есть ли способ добавить эти поля к вызову DelegateToSchema, а затем удалить их при отправке их обратно клиенту?

1 ответ

Решение

Ты ищешь transformResult

Детали реализации:

  1. В делегате ТоСхема вам нужно определить transforms массив.
  2. В Transform вам нужно определить transformResult функция для фильтрации результатов.
  3. Если у вас есть возможность отправлять аргументы на удаленный сервер GraphQL, вам следует использовать transformRequest
Другие вопросы по тегам