NestJS RedisIoAdapter 不可分配给 WebSocketAdapter<any, any, any> 类型的参数
Posted
技术标签:
【中文标题】NestJS RedisIoAdapter 不可分配给 WebSocketAdapter<any, any, any> 类型的参数【英文标题】:NestJS RedisIoAdapter is not assignable to parameter of type WebSocketAdapter<any, any, any> 【发布时间】:2021-06-10 15:16:08 【问题描述】:首先,抱歉语法错误,英语不是我的母语。
我只是想将 Redis 与 NestJS 一起使用,并为它创建了一个适配器。如果我说我直接从 NestJS 自己的示例中获取代码会更合适。这是我的 Redis 客户端:
import Redis from "ioredis";
import CONFIG from "src/config";
export const redis = new Redis(CONFIG.REDIS_URL);
这是适配器:
import IoAdapter from "@nestjs/platform-socket.io";
import createAdapter from "socket.io-redis";
import redis from "./redis";
import ServerOptions from "socket.io";
export class RedisIoAdapter extends IoAdapter
createioserver(port: number, options?: ServerOptions): any
const server = super.createIOServer(port, options);
const pubClient = redis;
const subClient = redis.duplicate();
const redisAdapter = createAdapter(
pubClient,
subClient,
);
server.adapter(redisAdapter);
return server;
但是当我尝试在我的应用程序上使用它时,它会说
app.useWebSocketAdapter(new RedisIoAdapter(app));
Argument of type 'RedisIoAdapter' is not assignable to parameter of type 'WebSocketAdapter<any, any, any>'. Type 'RedisIoAdapter' is missing the following properties from type 'WebSocketAdapter<any, any, any>': bindClientConnect, close
感谢您的所有帮助:3
【问题讨论】:
【参考方案1】:一个问题可能是因为没有安装@nestjs/websockets
。
请确保你已经安装了@nestjs/websockets
npm 包。
【讨论】:
我确定我完全下载了所有必要的包。【参考方案2】:这是我定义RedisIoAdapter
类的方式。
import RedisClient from 'redis';
import ServerOptions from 'socket.io';
import createAdapter from 'socket.io-redis';
import IoAdapter from '@nestjs/platform-socket.io';
const pubClient = new RedisClient(
host: process.env.REDIS_HOST,
port: process.env.REDIS_PORT
);
const subClient = pubClient.duplicate();
const redisAdapter = createAdapter( pubClient, subClient );
export class RedisIoAdapter extends IoAdapter
createIOServer(port: number, options?: ServerOptions): any
const server = super.createIOServer(port, options);
server.adapter(redisAdapter);
return server;
在main.ts
中,我包含了以下方式:
import RedisIoAdapter from './common/redis-adapter';
...
async function bootstrap()
const app = await NestFactory.create<NestExpressApplication>(AppModule);
// Uses Redis Adapter
app.useWebSocketAdapter(new
RedisIoAdapter((<any>app).getHttpServer()));
...
// Starting App now
bootstrap();
【讨论】:
以上是关于NestJS RedisIoAdapter 不可分配给 WebSocketAdapter<any, any, any> 类型的参数的主要内容,如果未能解决你的问题,请参考以下文章
NestJS Postgres Prisma - 错误类型'字符串'不可分配给参数类型'TemplateStringsArray | Sql'
ES2017 NEST JS @IsEmpty 在作为表达式调用时无法解析属性装饰器的签名。此表达式不可调用。不为空
R语言生成螺旋形(spirals)仿真数据实战:螺旋线型线性不可分数据集螺旋线型不可分数据集可视化为散点图中的每个数据点添加类标签信息