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

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

{
    user {
        name
        entries {
            title
            body
        }
    }
}

На сервере Node.js GraphQL, однако я хочу вернуть пользовательские записи, которые в настоящее время действительны, на основе 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#delegateToSchema) иУ меня нет возможности передать publishDate и expiryDate в качестве параметров запроса. По сути, мне нужно получить результаты и затем отфильтровать их в памяти.

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

1 Ответ

0 голосов
/ 17 февраля 2019

Вы ищете transformResult

Подробности реализации:

  1. При DelegateToSchema вам необходимо определить transformsмассив.
  2. При Преобразование вам необходимо определить функцию transformResult для фильтрации результатов.
  3. Если у вас есть возможность отправлять аргументы на удаленный сервер GraphQL, вам следует использоватьtransformRequest
...