【发布时间】:2022-11-08 22:22:12
【问题描述】:
我有一个使用 DataLoader 的 nestjs graphql 应用程序。它适用于查询和突变,但不适用于订阅。这是在 app.module 中定义配置的方式:
@Module({
imports: [
...
GraphQLModule.forRootAsync({
driver: ApolloDriver,
imports: [TasksModule],
inject: [TasksService],
useFactory: (tasksService: TasksService) => ({
playground: true,
autoSchemaFile: join(process.cwd(), 'src/schema.gql'),
context: () => createTaskLoaders(tasksService),
subscriptions: {
'graphql-ws': true,
'subscriptions-transport-ws': true
}
})
})
]
})
export class AppModule {}
这是在解析器中使用上下文的方式:
@ResolveField()
async fieldSet(@Parent() task: Task, @Context() context) {
console.log('context', Object.keys(context)) // The output is empty when it runs for subscription
return context.someCustomLoader.load(task.id)
}
createTaskLoaders 和 someCustomLoader 是什么无关紧要 - 它们只是自定义函数。问题是当从订阅内部使用它们时,它们不会传递给上下文。我想订阅案例需要一些额外的配置,但我找不到任何工作的 Nestjs 数据加载器 + 订阅示例以及有关订阅上下文的文档。
【问题讨论】:
标签: graphql nestjs subscription dataloader