我正在阿波罗做一个GraphQL后端,我想使用订阅。我跟踪了阿波罗的文档,并使用graphql-subscriptions获得了基本订阅。这个包还带有通过内置withFilter函数进行过滤的功能。但是,我不想发出通过PubSub发布的所有数据,因为其中一些数据仅用于过滤目的。
例如。
// GraphQL Schema
type Subscription {
mySubscription(filter: MySubscriptionFilter!): ID!
}// Publishing the event
pubsub.publish("MY_SUBSCRIPTION", { id: "2092330", username: "asdf", roles: [ "USER", "MODERATOR" ] });
// Handling the event for a subscription
const resolvers = {
Subscriptions: {
mySubscription: {
subscribe: withFilter(
() => pubsub.asyncIterator("MY_SUBSCRIPTION"),
(payload, variables) => {
return customFiltering(payload, variables);
}
)
}
}
}这将返回一个类型为:{ id, username, roles }的对象。但是,用户名和角色字段仅用于筛选。我最终需要返回一个{ mySubscription: id }类型的对象,因为我的GraphQL模式就是这么说的。
有办法做这种事吗?
// Handling the event for a subscription
const resolvers = {
Subscriptions: {
mySubscription: {
subscribe: withFilter(
() => pubsub.asyncIterator("MY_SUBSCRIPTION"),
(payload, variables) => {
return customFiltering(payload, variables);
}
).map(x => {
return { mySubsription: x.id }
}) // Map function where x is the payload from the pubsub
}
}
}发布于 2022-06-15 19:47:53
哇,看来我忽略了订阅中的解析函数。
来自graphql-subscriptions github页面
有效载荷操纵
还可以通过将解决方法添加到订阅中来操作已发布的有效负载:
const SOMETHING_UPDATED = 'something_updated';
export const resolvers = {
Subscription: {
somethingChanged: {
resolve: (payload, args, context, info) => {
// Manipulate and return the new value
return payload.somethingChanged;
},
subscribe: () => pubsub.asyncIterator(SOMETHING_UPDATED),
},
},
}https://stackoverflow.com/questions/72636926
复制相似问题