【问题标题】:NestJS Gateway dependency injectionNestJS 网关依赖注入
【发布时间】:2021-04-06 05:42:00
【问题描述】:

我有一个叫“PlayerService”的服务,网关叫“Player Gateway”,PlayersGateway有PlayerService的依赖,但是我不能在网关里面注入服务。

玩家网关

@UseInterceptors(RedisPropagatorInterceptor)
@WebSocketGateway()
@Injectable()
export class PlayerGateway
  extends BaseGateway
  implements OnGatewayConnection, OnGatewayInit, OnGatewayDisconnect {

constructor(private playerService: PlayerService) {
    super();
  }

播放器服务

@Injectable()
export class PlayerService extends BaseService<Player> {
  protected fieldsSearchable: FieldsSearchable = {};

  private logger = new Logger('PlayerService');

  constructor(
    @InjectRepository(PlayerRepository)
    repository: PlayerRepository,
    @Inject(REQUEST) protected request: Request,
    private redisService: RedisService,
  ) {
    super();
    this.setRepository(repository);
  }

播放器模块

@Module({
  imports: [
    TypeOrmModule.forFeature([Player, PlayerRepository]),
    RedisModule,
    SocketModule,
    RedisPropagatorModule,
  ],
  controllers: [PlayerController],
  exports: [TypeOrmModule, PlayerService],
  providers: [PlayerService, PlayerGateway],
})
export class PlayerModule {}

Modules.ts

@Module({
  imports: [
    RedisModule,
    SocketModule,
    RedisPropagatorModule,
    SessionModule,
    PlayerModule,
  ],
  exports: [RedisModule, SocketModule],
  controllers: [],
  providers: [ServerGateway, NetworkGateway],
})

我想知道的是如何在网关内注入服务或制作类似 rsrs 的方法

【问题讨论】:

  • 在控制器上使用请求对象,请避免在服务上使用它

标签: typescript dependency-injection nestjs provider gateway


【解决方案1】:

您的 PlayerService 正在尝试注入请求:

@Inject(REQUEST) protected request: Request

这对于构建网关实例没有意义,因为它应该独立于任何单独的 HTTP 请求。你真的需要访问PlayerService 中的请求吗?如果是这样,您必须将其拆分为单独的服务

【讨论】:

    猜你喜欢
    • 2021-12-01
    • 2020-09-09
    • 2021-04-23
    • 2021-05-29
    • 2023-03-05
    • 2021-11-19
    • 2020-03-25
    • 2019-03-28
    • 1970-01-01
    相关资源
    最近更新 更多