An Interest In:
Web News this Week
- March 20, 2024
- March 19, 2024
- March 18, 2024
- March 17, 2024
- March 16, 2024
- March 15, 2024
- March 14, 2024
February 23, 2022 06:06 pm GMT
Original Link: https://dev.to/endykaufman/custom-injecting-logic-for-nestjs-with-support-multi-providing-438k
Custom injecting logic for NestJS with support multi providing
Installation
npm i --save nestjs-custom-injector
Links
https://nestjs-custom-injector.site15.ru/api - Demo application with nestjs-custom-injector.
https://github.com/EndyKaufman/nestjs-custom-injector-example - Example generated with nest cli for "Usage" sections in readme.
Usage
Create common interface with token in animal-provider.interface.ts
export const ANIMAL_PROVIDER = 'ANIMAL_PROVIDER';export interface AnimalProviderInteface { type: string; say(): string;}
Create first type of logic for cats in animal-cats.service.ts
import { Injectable } from '@nestjs/common';import { AnimalProviderInteface } from './animal-provider.interface';@Injectable()export class AnimalCatsService implements AnimalProviderInteface { type = 'cat'; say(): string { return 'meow'; }}
Create second type of logic for dogs in animal-dogs.service.ts
import { Injectable } from '@nestjs/common';import { AnimalProviderInteface } from './animal-provider.interface';@Injectable()export class AnimalDogsService implements AnimalProviderInteface { type = 'dog'; say(): string { return 'woof'; }}
Create controller animals.controller.ts
import { Controller, Get, Query } from '@nestjs/common';import { CustomInject } from 'nestjs-custom-injector';import { AnimalProviderInteface, ANIMAL_PROVIDER,} from './animal-provider.interface';@Controller('animals')export class AnimalsController { @CustomInject(ANIMAL_PROVIDER, { multi: true }) private animalProviders!: AnimalProviderInteface[]; @Get('animal-types') animalTypes() { return this.animalProviders.map((animalProvider) => animalProvider.type); } @Get('what-says-animals') whatSaysAnimals() { return this.animalProviders.map( (animal) => `${animal.type} say ${animal.say()}` ); } @Get('who-say') whoSay(@Query('voice') voice: string) { const animal = this.animalProviders.find( (animal) => animal.say() === voice ); if (!animal) { return { error: `I don't know who say ${voice}` }; } return `${animal.type} say ${animal.say()}`; }}
Append all logic to main app module app.module.ts
import { Module } from '@nestjs/common';import { CustomInjectorModule } from 'nestjs-custom-injector';import { AnimalCatsService } from './animal-cats.service';import { AnimalDogsService } from './animal-dogs.service';import { AnimalsController } from './animals.controller';@Module({ ... imports: [ ... CustomInjectorModule.forRoot(), CustomInjectorModule.forFeature({ providers: [{ provide: ANIMAL_PROVIDER, useClass: AnimalCatsService }], }), CustomInjectorModule.forFeature({ providers: [ { provide: ANIMAL_PROVIDER, useValue: new AnimalDogsService() }, ], }), ... ], controllers: [ ... AnimalsController ... ] ...})export class AppModule {}
Original Link: https://dev.to/endykaufman/custom-injecting-logic-for-nestjs-with-support-multi-providing-438k
Share this article:
Tweet
View Full Article
Dev To
An online community for sharing and discovering great ideas, having debates, and making friendsMore About this Source Visit Dev To