I’m trying to set up Redis caching
for my nestjs
–graphql
project by following this official guide and this tutorial. I’m following the exact steps that are mentioned but I’m getting this error that Property 'get' does not exist on type 'Cache'.
Here’s the exact code
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();
}
}
3
Answers
There isn’t much code but one thing that comes to my mind is that Nest couldn’t resolve the dependency or it resolved it wrongly. I don’t see any import of type
Cache
look at the docs you have provided (quote below) maybe it will help.Import the
Cache
used in@Inject(CACHE_MANAGER) private cacheManager: Cache
from
cache-manager
import { Cache } from ‘cache-manager’;
Thanks @Snehasish Dawn, I would upvote your answer if I could…
Cache
is a default interface of typescript so it is not imported fromcache-manager
by default by the IDE.(link to typescript documentation)