“Cache”类型上不存在属性“get”。 NestJs 项目

问题描述 投票:0回答:3

我正在尝试按照此

官方指南
和此
教程
为我的
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();
  }
}
javascript node.js caching redis nestjs
3个回答
26
投票

您的应用程序正在使用的

Cache
类型就是在 here 找到的类型。

您需要导入构造函数中使用的

Cache
类型:

constructor(@Inject(CACHE_MANAGER) private cacheManager: Cache) {}

来自

cache-manager

import { Cache } from 'cache-manager';

1
投票

代码不多,但我想到的一件事是 Nest 无法解决依赖关系,或者错误地解决了它。我没有看到任何类型的导入

Cache
查看您提供的文档(下面引用)也许会有帮助。

Cache 类是从缓存管理器导入的,而 CACHE_MANAGER 令牌是从 @nestjs/common 包导入的。


1
投票

谢谢@Snehasish Dawn,如果可以的话,我会投票给你的答案......

Cache
是 typescript 的默认接口,因此 IDE 默认情况下不会从
cache-manager
导入它。 (打字稿文档链接

© www.soinside.com 2019 - 2024. All rights reserved.