【发布时间】:2019-06-28 07:05:55
【问题描述】:
警告以下代码不正确,需要根据请求创建数据源。
请勿使用以下代码
我正在尝试将 apollo-rest-datasource 与 NestJS 一起使用。我看到的缺点是数据源不参与 NestJS 的 DI 系统。
我可以通过让 NestJS 实例化单例数据源,然后使用 GraphQLModule.forRootAsync 将这些实例注入 Apollo 服务器的 dataSources 属性来解决此问题。
GraphQLModule.forRootAsync({
imports: [
DataSourcesModule
],
useFactory: (...args: DataSource[]) => {
return {
typePaths: ['./**/*.graphql'],
context: ({req}: {req: Request}) => ({ token: req.headers.authorization }),
playground: true,
dataSources: () => {
let dataInstances = {} as any;
args.forEach(arg => {
const dataSource = arg as any;
dataInstances[dataSource.constructor.name] = arg;
});
return dataInstances;
},
};
},
inject: [...dataSources]
我现在让 DI 在我的 DataSource 中工作,并且可以在解析器中使用 DI 来包含我的 DataSource 实例(而不是从 GraphQL 上下文访问)。虽然这有效,但感觉不对。
对于 NestJS 的 DI 和 Apollo GraphQL 上下文是否有更好的方法?
【问题讨论】:
-
您好,我目前正在研究将 Nest 与 GraphQL 结合使用,请问您为什么决定使用 apollo rest 数据源而不是常规的 nest http 客户端?感谢您的帮助!
-
Apollo 数据源提供了一种缓存机制来防止重复的 http 响应。
标签: typescript graphql apollo-server nestjs