Nest - service服务

141 阅读1分钟

1. service作用 ?

服务service,负责具体的数据相关的处理,比如增删改查等,并为controller所用。

2. 如何使用service ?

看下面的代码

import { Injectable } from '@nestjs/common';
import { Cat } from './interfaces/cat.interface';

@Injectable()
export class CatsService {
  private readonly cats: Cat[] = [];

  create(cat: Cat) {
    this.cats.push(cat);
  }

  findAll(): Cat[] {
    return this.cats;
  }
}

服务作为可被提供使用的,使用了@Injectable 对服务class 附加元数据。

然后到app.module.ts 进行注入到providers中。如下形式:

import { CatsService } from './service/cats.service'
import { AppService } from './service/app.service'

@Module({
  imports: [],
  controllers: [...allController],
  providers: [
    AppService,
    {
      provide: 'CatsService',
      useClass: CatsService
    }],
})

export class AppModule { }

其中providers(数组形式)中可注入的service有多种形式的写法,

方式有:

  1. 直接AppService的注入,
  2. 也可以是对象的注入。

其中对象形式是:{ provide: CatService, useClass: CatService }

通过 provide 指定注入的 flag 该名称类型不固定,CatService(class的形式), ‘CatService’(string的形式) 等类型都没问题(只是在controller中引入的方式不同)

通过 useClass 指定注入的对象的类,Nest 会自动对它做实例化再注入。

import { CatsService } from '../service/cats.service'; 

@Controller('/cats')
export class CatsController {
    constructor(private readonly catService: CatsService) { }
    ......
}

该代码等同于下面:

import { CatsService } from '../service/cats.service';

@Controller('/cats')
export class CatsController {    
     @Inject('CatsService') 
     private readonly catService: CatsService
     .....
 }

因为上面的providers中使用对象形式,且flag为string类型的'CatsService', 自然该地方就是@Inject('CatsService')

3. controller使用service的实例代码

import { CatsService } from '../service/cats.service';
import { Cat } from '../interfaces/cat.interface';

@Controller('/cats')
export class CatsController {

    //constructor(private readonly catService: CatsService) { }
    @Inject('CatsService')
    private readonly catService: CatsService
    
    @Get()
    findAll(@Res() res) {
        res.send(this.catService.findAll())
    }

    @Post('create')
    async create(@Body() createCatDto: Cat) {
        await this.catService.create(createCatDto)
        return 'create cat success hhhaha'
    }
}