nemmarramos / nest-mediasoup-base

NestJS Base implementation for mediasoup streaming
MIT License
3 stars 0 forks source link

How to Use BaseGateway #1

Open gustjr123 opened 1 year ago

gustjr123 commented 1 year ago

Thank you for sharing your code!! I am not familar with nestjs and mediasoup

Now I have some problem.

I want to use your 'BaseGateway' by using 'extends'
So my gateway code is right this

import { BaseGateway } from '@nramos/nest-mediasoup-base';
// import { WebSocketGateway } from '@nestjs/websockets';

// @WebSocketGateway({ namespace: 'test', cors: { origin: '*' } })
export class MediaGateway extends BaseGateway<any> {}

and this is my module

import { Module } from '@nestjs/common';
import { MediaGateway } from './mediasoup/media.gateway';

@Module({
  imports: [],
  controllers: [],
  providers: [MediaGateway],
})
export class AppModule {}

but it is throw error

Error: Nest can't resolve dependencies of the MediaGateway (?, Object). Please make sure that the argument Object at index [0] is available in the AppModule context.

Potential solutions:
- If Object is a provider, is it part of the current AppModule?
- If Object is exported from a separate @Module, is that module imported within AppModule?
  @Module({
    imports: [ /* the Module containing Object */ ]
  })

    at Injector.lookupComponentInParentModules (/home/john/mediasoup/tttt/mediabase/node_modules/@nestjs/core/injector/injector.js:241:19)
    at Injector.resolveComponentInstance (/home/john/mediasoup/tttt/mediabase/node_modules/@nestjs/core/injector/injector.js:194:33)
    at resolveParam (/home/john/mediasoup/tttt/mediabase/node_modules/@nestjs/core/injector/injector.js:116:38)
    at async Promise.all (index 0)
    at Injector.resolveConstructorParams (/home/john/mediasoup/tttt/mediabase/node_modules/@nestjs/core/injector/injector.js:131:27)
    at Injector.loadInstance (/home/john/mediasoup/tttt/mediabase/node_modules/@nestjs/core/injector/injector.js:57:13)
    at Injector.loadProvider (/home/john/mediasoup/tttt/mediabase/node_modules/@nestjs/core/injector/injector.js:84:9)
    at async Promise.all (index 3)
    at InstanceLoader.createInstancesOfProviders (/home/john/mediasoup/tttt/mediabase/node_modules/@nestjs/core/injector/instance-loader.js:47:9)
    at /home/john/mediasoup/tttt/mediabase/node_modules/@nestjs/core/injector/instance-loader.js:32:13

how can i resolve it?

gustjr123 commented 1 year ago

try other way and resolve it Thank you

nemmarramos commented 1 year ago

Hi @gustjr123,

try to pass it as imports instead of providers

import { WssGateway } from './wss/wss.gateway';
import { Module } from '@nestjs/common';

@Module({
    imports: [WssGateway],
})
export class AppModule {}
gustjr123 commented 1 year ago

Thanks your reply I create new project for testing this case.

structure is this src └ main.ts └ wss.gateway.ts └ app.module.ts

app.module.ts

import { Module } from '@nestjs/common';
import { WssGateway} from './mediasoup.gateway';

@Module({
  imports: [WssGateway],
  controllers: [],
  providers: [],
})
export class AppModule {}

wss.gateway.ts

import { BaseGateway } from '@nramos/nest-mediasoup-base';
export class WssGateway extends BaseGateway<any> {}

main.ts

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(3000);
}
bootstrap();

I follow your comment and this throw Error

/home/john/mediasoup/testes/test/node_modules/@nramos/nest-mediasoup-base/dist/lib/streaming/room.js:63
            this.baseLogger.debug('createWebRtcTransport user', user?.userProfile);
                                                                     ^

SyntaxError: Unexpected token '.'
    at wrapSafe (internal/modules/cjs/loader.js:915:16)
    at Module._compile (internal/modules/cjs/loader.js:963:27)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)
    at Module.load (internal/modules/cjs/loader.js:863:32)
    at Function.Module._load (internal/modules/cjs/loader.js:708:14)
    at Module.require (internal/modules/cjs/loader.js:887:19)
    at require (internal/modules/cjs/helpers.js:74:18)
    at Object.<anonymous> (/home/john/mediasoup/testes/test/node_modules/@nramos/nest-mediasoup-base/src/index.ts:7:1)
    at Module._compile (internal/modules/cjs/loader.js:999:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)

I guess nestjs or mediasoup version was updated and conflict occurs in code.

PS. My problem has been solved now, so this is just my curiosity. I glad to your comment XD