- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道如何在 type-graphql 中使用 RESTDataSource 并因此在 redis 中正确缓存。我会很感激一个小例子。
目前我使用 DI 容器来获取一个服务,该服务是从 RestDataSource 类扩展而来的,但这不是正确的方法。
BookmarkResolver.ts
import { Resolver, FieldResolver, Root, Query, Ctx, Authorized } from 'type-graphql';
import { DealService } from '../service/DealService';
import { AvailableLocale } from '../enum/AvailableLocale';
import { Bookmark } from '../entity/Bookmark';
@Resolver(_of => Bookmark)
export class BookmarkResolver {
constructor(private dealService: DealService) {}
@FieldResolver()
async wordpressDeal(@Root() bookmark: Bookmark) {
return await this.dealService.getDealById(bookmark.item_id, AvailableLocale.STAGING);
}
}
import { Service } from 'typedi';
import { AbstractService } from './AbstractService';
import { AvailableLocale } from '../enum/AvailableLocale';
@Service()
export class DealService extends AbstractService {
baseURL = process.env.DEAL_SERVICE_URL;
async getDealById(dealId: string | number, locale: AvailableLocale) {
const response = await this.get(
'deals/' + dealId,
{ locale }
);
return this.dealReducer(response);
}
dealReducer(deal: any) {
return {
id: deal.id || 0,
title: deal.title
};
}
}
import { RESTDataSource, HTTPCache } from 'apollo-datasource-rest';
import { Service } from 'typedi';
@Service()
export class AbstractService extends RESTDataSource {
constructor() {
super();
this.httpCache = new HTTPCache();
}
}
最佳答案
分享 RESTDataSource
通过 ApolloServer
的上下文。通过使用 @Ctx()
访问上下文,在解析器中使用它装饰器。
1.定义一个RESTDataSource
根据apollo-datasource-rest example定义数据源.
export class TodoDataSource extends RESTDataSource {
constructor() {
super();
this.baseURL = "https://jsonplaceholder.typicode.com/todos";
}
async getTodos(): Promise<Todo[]> {
return this.get("/");
}
}
2.创建DataSource的实例并放入Context
const server = new ApolloServer({
schema,
playground: true,
dataSources: () => ({
todoDataSource: new TodoDataSource(),
}),
});
3.访问解析器中的DataSource
@Ctx()
装饰器访问解析器中的上下文,以便您可以使用数据源。
@Resolver(Todo)
export class TodoResolver {
@Query(() => [Todo])
async todos(@Ctx() context: Context) {
return context.dataSources.todoDataSource.getTodos();
}
}
完整的、可运行的示例位于
https://github.com/lauriharpf/type-graphql-restdatasource
关于typegraphql - 如何使用 type-graphql 和 RESTDataSource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59682119/
我要更新firstName和 lastName的 profile实体。 我希望用户能够更新它们两者或仅更新其中之一。 然而我不知道如何进行突变,使得其中一个参数( firstName 和 lastNa
我想知道如何在 type-graphql 中使用 RESTDataSource 并因此在 redis 中正确缓存。我会很感激一个小例子。 目前我使用 DI 容器来获取一个服务,该服务是从 RestDa
我想在 TypeGraphQL 中创建用户和文档之间的简单关系。因此,用户可以创建无限的文档,而一个文档只有一个创建者。但我收到一个错误。 用户 import { Entity, PrimaryGen
当我从事 graphql 项目时,我喜欢 type-graphql方式:使用类和装饰器来创建 GraphQL 模式。 但现在我遇到了一个问题:我们需要使用一些从另一个包定义的 GraphQL 模式。他
我有一个 graphql 服务器和一个 role 表,我想在一个突变中保存多个角色。 我搜索了很多,但一无所获。 我该如何做: mutation { addRoles (roles: [
经过一天的工作,我终于能够让 TypeQL 与 Netlify Functions/AWS Lambda 一起工作,查看文档和示例,最后绝望的蛮力。 我在这里为其他人分享我的工作代码(或供我自己将来引
我是一名优秀的程序员,十分优秀!