我正在尝试按照此
官方指南和此
教程为我的
Redis caching
-nestjs
项目设置graphql
。我正在按照提到的具体步骤进行操作,但出现此错误 Property 'get' does not exist on type 'Cache'.
这是确切的代码
import {User} from './user.entity'
import {Resolver, Query, ResolveField, Args, Parent, Mutation} from '@nestjs/graphql'
import { UsersService } from './users.service';
import { PostsService } from '../posts/posts.service';
import { CurrentUser } from 'src/auth/auth.resolver';
import { CACHE_MANAGER, Inject, UseGuards } from '@nestjs/common';
import { GqlAuthGuard } from 'src/auth/graphql-auth.guard';
import { Cache } from 'cache-manager'; <---------this is you need to import
@Resolver(of => User)
export class UsersResolver {
constructor(
@Inject(CACHE_MANAGER) private cacheManager: Cache,
private usersService: UsersService,
private postsService: PostsService,
) {}
@Query()
async getUsers() {
const value = await this.cacheManager.get('key'); //Now .get property is working.
if(value){
console.log({
data: value,
loadsFrom: 'redis cache'
})
}
return await this.usersService.findAll();
}
}
您的应用程序正在使用的
Cache
类型就是在 here 找到的类型。
您需要导入构造函数中使用的
Cache
类型:
constructor(@Inject(CACHE_MANAGER) private cacheManager: Cache) {}
来自
cache-manager
:
import { Cache } from 'cache-manager';
代码不多,但我想到的一件事是 Nest 无法解决依赖关系,或者错误地解决了它。我没有看到任何类型的导入
Cache
查看您提供的文档(下面引用)也许会有帮助。
Cache 类是从缓存管理器导入的,而 CACHE_MANAGER 令牌是从 @nestjs/common 包导入的。
谢谢@Snehasish Dawn,如果可以的话,我会投票给你的答案......
Cache
是 typescript 的默认接口,因此 IDE 默认情况下不会从 cache-manager
导入它。
(打字稿文档链接)