Nest 装饰器 使用

72 阅读1分钟

声明装饰器

  • @Module
  • @Controller 声明模块 controller
  • @Injectable 声明模块 provider

注入方式

/controller 文件

1.构造器注入

import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';

@Controller()
export class AppController {
    constructor(private readonly appService: AppService) 
    
  @Get()
  getHello(): string {
    console.log(this.cat);
    return this.appService.getHello();
  }
}

2.属性注入

import { Controller, Get, Inject} from '@nestjs/common';
import { AppService } from './app.service';

@Controller()
export class AppController {

   @Inject(AppService)
  private readonly appService: AppService;
  
  @Get()
  getHello(): string {
    console.log(this.cat);
    return this.appService.getHello();
  }
}

例子:注入token

/app.module.ts

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';

// @Module声明模块
@Module({
  imports: [],
  controllers: [AppController],

  providers: [
    AppService,
    // 1.注入token 通过 useFactory、useValue 等方式声明 provider
    {
      provide: 'Cat',
      useFactory() {
        return {
          name: '茶茶',
        };
      },
    },
  ],
})
export class AppModule {}

  • 第一种 @Inject()
import { Controller, Get, Inject } from '@nestjs/common';
import { AppService } from './app.service';

@Controller()
export class AppController {

  @Inject(AppService)
  private readonly appService: AppService;
  
  @Inject('Cat')
  private readonly cat: Record<string, any>;

  @Get()
  getHello(): string {
    console.log(this.cat);
    return this.appService.getHello();
  }
}

  • 第二种 @Optional()
import { Controller, Get, Inject, Optional } from '@nestjs/common';
import { AppService } from './app.service';

@Controller()
export class AppController {

  @Optional()
  @Inject('Cat')
  private readonly cat: Record<string, any>;

  constructor(@Optional() private readonly appService: AppService) {}
 
  @Get()
  getHello(): string {
    console.log(this.cat);
    return this.appService.getHello();
  }
}

结果

1699005917439.png

全局声明 任意注入 @Global()

模块名.module.ts

import { Global, Module } from '@nestjs/common';
import { AaaService } from './aaa.service';
import { AaaController } from './aaa.controller';

@Global()
@Module({
  controllers: [AaaController],
  providers: [AaaService],
})
export class AaaModule {}