NestJS RedisIoAdapter 不可分配给 WebSocketAdapter 类型的参数<any, any, any>
NestJS RedisIoAdapter is not assignable to parameter of type WebSocketAdapter<any, any, any>
首先,对于语法错误,抱歉,英语不是我的母语。
我只是想将 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
一个问题可能是因为没有安装 @nestjs/websockets
。
请确保您已安装 @nestjs/websockets
npm 包。
我是这样定义的 RedisIoAdapter
class.
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();
首先,对于语法错误,抱歉,英语不是我的母语。
我只是想将 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
一个问题可能是因为没有安装 @nestjs/websockets
。
请确保您已安装 @nestjs/websockets
npm 包。
我是这样定义的 RedisIoAdapter
class.
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();