Как включить поля в 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
Детали реализации:
- В делегате ТоСхема вам нужно определить
transforms
массив. - В Transform вам нужно определить
transformResult
функция для фильтрации результатов. - Если у вас есть возможность отправлять аргументы на удаленный сервер GraphQL, вам следует использовать
transformRequest