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有多种形式的写法,
方式有:
- 直接AppService的注入,
- 也可以是对象的注入。
其中对象形式是:
{ 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'
}
}