Я пытаюсь использовать подписки graphql, используя следующие библиотеки:
graphql-subscription на стороне сервера
subscription-transport-ws на стороне клиента.
и когда не используется механизм фильтрации, все идет хорошо. Но когда я добавляю в него функцию withFilter
, возникает проблема, которую никакая переменная или объект контекста не получает в функцию фильтрации.
Например, я хочу отфильтровать данные по группе. Клиент запрашивает сервер со следующим запросом:
А на стороне сервера реализованный метод выглядит так:
this.resolvers.Subscription[subscription.name] = {
subscribe: withFilter((...params) => {console.log('subscription params: ', ...params); return this.pubsub.asyncIterator(subscription.name.toUpperCase());}, (...params) => {
console.log('filtering params: ', ...params)
return true // payload[subscription.name]._group === variables._group;
}),
};
который создает некоторые подписки динамически (и его динамика не имеет отношения к этой проблеме). Теперь два журнала, которые я сделал выше, будут следующими:
параметры подписки:
null {} null null
параметры фильтрации:
{ message_onMessage: { text: 'test', _offline_id: '1587981902663', _status: 3, time: 1587981902713, _id: 1587981902716, _rev: 1587981902716 } } {} null null
Таким образом, в обратном вызове, который передается в функцию withFilter
, которая используется для фильтрации данных, у меня нет объекта переменных и объекта контекста для получения параметра запрашивающего _group
.
И установленная версия библиотек выглядит следующим образом:
// server
"graphql": "^14.6.0",
"graphql-subscriptions": "^1.1.0",
// client
"graphql": "^15.0.0",
"graphql-tag": "^2.10.3",
"subscriptions-transport-ws": "^0.9.16"
...params
используется для перехвата всех параметров в качестве метода отладки. - person ConductedClever   schedule 27.04.2020(value, args, context, info)
args? - person xadm   schedule 27.04.2020