KARNAV PARGI
KARNAV PARGI

Reputation: 653

Angular V17-SSR-ERROR Error: NullInjectorError: No provider for WrappedSocket

I have upgraded Angular to V17 with SSR and when i tried to load page this error is coming. R3InjectorError(Standalone[_HomeComponent])[_SocketService -> _SocketService -> _SocketService -> WrappedSocket -> WrappedSocket]: NullInjectorError: No provider for WrappedSocket!

Note: - i can not add this inside modules because i am working with SSR Standalone components only.

Need help to resolve this issue by adding these inside providers or by using service.ts

ERROR Error: NullInjectorError: No provider for WrappedSocket!
    at t (angular/node_modules/zone.js/fesm2015/zone-error.js:85:33)
    at NullInjector.get (angular/node_modules/@angular/core/fesm2022/core.mjs:5626:27)
    at R3Injector.get (angular/node_modules/@angular/core/fesm2022/core.mjs:6069:33)
    at R3Injector.get (angular/node_modules/@angular/core/fesm2022/core.mjs:6069:33)
    at injectInjectorOnly (angular/node_modules/@angular/core/fesm2022/core.mjs:911:40)
    at Module.ɵɵinject (angular/node_modules/@angular/core/fesm2022/core.mjs:917:42)
    at RoutingConstants (angular/src/app/shared/services/socket.service.ts:10:27)
    at eval (angular/node_modules/@angular/core/fesm2022/core.mjs:6189:43)
    at runInInjectorProfilerContext (angular/node_modules/@angular/core/fesm2022/core.mjs:867:9)
    at R3Injector.hydrate (angular/node_modules/@angular/core/fesm2022/core.mjs:6188:17)
    at R3Injector.get (angular/node_modules/@angular/core/fesm2022/core.mjs:6058:33)
    at R3Injector.get (angular/node_modules/@angular/core/fesm2022/core.mjs:6069:33)
    at ChainedInjector.get (angular/node_modules/@angular/core/fesm2022/core.mjs:15378:36)
    at lookupTokenUsingModuleInjector (angular/node_modules/@angular/core/fesm2022/core.mjs:4137:39)
    at getOrCreateInjectable (angular/node_modules/@angular/core/fesm2022/core.mjs:4185:12) {
  originalStack: 'Error: NullInjectorError: No provider for WrappedSocket!\n' +
    '    at t (angular/node_modules/zone.js/fesm2015/zone-error.js:85:33)\n' +
    '    at NullInjector.get (angular/node_modules/@angular/core/fesm2022/core.mjs:5626:27)\n' +
    '    at R3Injector.get (angular/node_modules/@angular/core/fesm2022/core.mjs:6069:33)\n' +
    '    at R3Injector.get (angular/node_modules/@angular/core/fesm2022/core.mjs:6069:33)\n' +
    '    at injectInjectorOnly (angular/node_modules/@angular/core/fesm2022/core.mjs:911:40)\n' +
    '    at Module.ɵɵinject (angular/node_modules/@angular/core/fesm2022/core.mjs:917:42)\n' +
    '    at RoutingConstants (angular/src/app/shared/services/socket.service.ts:10:27)\n' +
    '    at eval (angular/node_modules/@angular/core/fesm2022/core.mjs:6189:43)\n' +
    '    at runInInjectorProfilerContext (angular/node_modules/@angular/core/fesm2022/core.mjs:867:9)\n' +
    '    at R3Injector.hydrate (angular/node_modules/@angular/core/fesm2022/core.mjs:6188:17)\n' +
    '    at R3Injector.get (angular/node_modules/@angular/core/fesm2022/core.mjs:6058:33)\n' +
    '    at R3Injector.get (angular/node_modules/@angular/core/fesm2022/core.mjs:6069:33)\n' +
    '    at ChainedInjector.get (angular/node_modules/@angular/core/fesm2022/core.mjs:15378:36)\n' +
    '    at lookupTokenUsingModuleInjector (angular/node_modules/@angular/core/fesm2022/core.mjs:4137:39)\n' +
    '    at getOrCreateInjectable (angular/node_modules/@angular/core/fesm2022/core.mjs:4185:12)',
  zoneAwareStack: 'Error: NullInjectorError: No provider for WrappedSocket!\n' +
    '    at t (angular/node_modules/zone.js/fesm2015/zone-error.js:85:33)\n' +
    '    at NullInjector.get (angular/node_modules/@angular/core/fesm2022/core.mjs:5626:27)\n' +
    '    at R3Injector.get (angular/node_modules/@angular/core/fesm2022/core.mjs:6069:33)\n' +
    '    at R3Injector.get (angular/node_modules/@angular/core/fesm2022/core.mjs:6069:33)\n' +
    '    at injectInjectorOnly (angular/node_modules/@angular/core/fesm2022/core.mjs:911:40)\n' +
    '    at Module.ɵɵinject (angular/node_modules/@angular/core/fesm2022/core.mjs:917:42)\n' +
    '    at RoutingConstants (angular/src/app/shared/services/socket.service.ts:10:27)\n' +
    '    at eval (angular/node_modules/@angular/core/fesm2022/core.mjs:6189:43)\n' +
    '    at runInInjectorProfilerContext (angular/node_modules/@angular/core/fesm2022/core.mjs:867:9)\n' +
    '    at R3Injector.hydrate (angular/node_modules/@angular/core/fesm2022/core.mjs:6188:17)\n' +
    '    at R3Injector.get (angular/node_modules/@angular/core/fesm2022/core.mjs:6058:33)\n' +
    '    at R3Injector.get (angular/node_modules/@angular/core/fesm2022/core.mjs:6069:33)\n' +
    '    at ChainedInjector.get (angular/node_modules/@angular/core/fesm2022/core.mjs:15378:36)\n' +
    '    at lookupTokenUsingModuleInjector (angular/node_modules/@angular/core/fesm2022/core.mjs:4137:39)\n' +
    '    at getOrCreateInjectable (angular/node_modules/@angular/core/fesm2022/core.mjs:4185:12)',
  ngTempTokenPath: null,
  ngTokenPath: [
    '_SocketService',
    '_SocketService',
    'WrappedSocket',
    'WrappedSocket'
  ]
}

Upvotes: -1

Views: 586

Answers (1)

KARNAV PARGI
KARNAV PARGI

Reputation: 653

Because i can not make use of Modules in angular 17 I have Created new Service with extends Socket method and and then impored this new service to my exsiting service.

before

app.module.ts
......................................................................
const config: SocketIoConfig = { url: environment.SOCKET_API, options: {} };
@NgModule({
imports: [
SocketIoModule.forRoot(config),
]
})
......................................................................
socket.service.ts
......................................................................
private socket = inject(Socket)
export class SocketService {

  online(id: string){
    this.socket.connect(id);
  }
}
......................................................................

After

ngx-socket.service.ts
......................................................................

const config: SocketIoConfig = { url: environment.SOCKET_API, options: {} };

@Injectable({
  providedIn: "root",
})
export class NgxSocketService extends Socket {
  constructor() {
    super(config);
    this.disconnect();
  }
}
......................................................................
socket.service.ts
......................................................................
import { NgxSocketService } from "./ngx-socket.service";
private socket = inject(NgxSocketService);

@Injectable({
  providedIn: "root",
})
export class SocketService {
private socket = inject(NgxSocketService);
constructor() {
    afterNextRender(() => {
      const senderId = this.jwtService.getUserId();
      if (senderId) {
        this.connect(senderId);
      }
    });
  }
}
}

Upvotes: 1

Related Questions