【发布时间】:2020-04-28 03:06:55
【问题描述】:
我想知道如何在 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);
}
}
DealService.ts
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
};
}
}
AbstractService.ts
import { RESTDataSource, HTTPCache } from 'apollo-datasource-rest';
import { Service } from 'typedi';
@Service()
export class AbstractService extends RESTDataSource {
constructor() {
super();
this.httpCache = new HTTPCache();
}
}
【问题讨论】:
标签: typegraphql