使用 CacheModule.register 向 Nestjs 注册 Redis 时出现类型错误

Luc*_*ido 7 redis nestjs

我正在尝试使用以下包来实现redis:“CacheModule”和“cache-manager-redis-store”。后者在将其分配给 CacheModule 的 register 方法的 store 属性时给我带来了类型错误。

发生错误的代码:

`

import { Module, CacheModule } from "@nestjs/common";
import { AuthModule } from "./auth/auth.module";
import { MongooseModule } from "@nestjs/mongoose";
import { EnvConfiguration } from "./config/env.config";
import { ConfigModule } from "@nestjs/config";
import { redisStore } from "cache-manager-redis-store";
@Module({
  imports: [
    ConfigModule.forRoot({
      load: [EnvConfiguration],
    }),
    MongooseModule.forRoot(process.env.MONGODB),
    AuthModule,
    CacheModule.register({
      store: redisStore, <--- HERE THE ERROR HAPPENS
      host: "localhost",
      port: 6379,
    }),
  ],
  controllers: [],
  providers: [],
})
export class AppModule {}

Run Code Online (Sandbox Code Playgroud)

`

错误:`

(property) store: (string | CacheStoreFactory | CacheStore) & ((config: RedisClientOptions<RedisModules, RedisFunctions, RedisScripts> & Config) => Promise<...>)
Cache manager. The default value is 'memory' (memory storage). See Different Stores for more information.

Type '(config: RedisClientOptions<RedisModules, RedisFunctions, RedisScripts> & Config) => Promise<RedisStore>' cannot be assigned to type '(string | CacheStoreFactory | CacheStore) & ((config: RedisClientOptions<RedisModules, RedisFunctions, RedisScripts > & Configuration) => Promise<...>)'.
  Type '(config: RedisClientOptions<RedisModules, RedisFunctions, RedisScripts> & Config) => Promise<RedisStore>' cannot be assigned to type 'string & ((config: RedisClientOptions<RedisModules, RedisFunctions, RedisScripts> & Config) => Promise<...>)'.
    Type '(config: RedisClientOptions<RedisModules, RedisFunctions, RedisScripts> & Config) => Promise<RedisStore>' cannot be assigned to type 'string'.ts(2322)
Run Code Online (Sandbox Code Playgroud)

`

我希望能够使用 Nestjs 实现 Redis,解决所描述的问题或使用另一种可以正常工作的实现方式。

moh*_*sen 7

到目前为止,cache-manager v5 与 NestJS 不兼容,所以
只需使用这个版本:

"cache-manager": "^3.6.0",
"cache-manager-redis-store": "^2.0.0",
Run Code Online (Sandbox Code Playgroud)

  • 快到 2023 年 9 月了,但这是唯一对我有用的解决方案。转到“package.json”更改上述属性,然后删除“node_modules”,运行“npm i”和“npm run build”。 (2认同)

小智 -1

改变这个:

import { redisStore } from "cache-manager-redis-store";
Run Code Online (Sandbox Code Playgroud)

对此:

import redisStore from "cache-manager-redis-store";
Run Code Online (Sandbox Code Playgroud)

或这个:

import * as redisStore from "cache-manager-redis-store";
Run Code Online (Sandbox Code Playgroud)

或这个:

// eslint-disable-next-line @typescript-eslint/no-var-requires
const redisStore = require("cache-manager-redis-store");
Run Code Online (Sandbox Code Playgroud)