提供者
Providers
是Nest
的一个基本概念。提供者是一个大的分类,比如sevice
、repository
、factory
、helper
等都是提供者。可以通过constructor
注入依赖关系。对象之间可以创建各种关系。提供者只是一个用@Injectable()
装饰的类
在控制器的文章中,知道了如何创建一个简单的控制器,控制器中不应该包含过多的复杂任务处理逻辑,这部分的任务逻辑处理应该交给Providers
因为Nest可以面向对象的方式设计和组织依赖性,所以强烈建议遵循SOLID原则
什么是SOLID原则
SOLID 原则其实是用来指导软件设计的,它一共分为五条设计原则,分别是:
- 单一职责原则(SRP)
- 开闭原则(OCP)
- 里氏替换原则(LSP)
- 接口隔离原则(ISP)
- 依赖倒置原则(DIP)
服务
从创建一个简单的服务开始,服务由控制器使用,服务其实也是一个提供者
import { Injectable } from '@nestjs/common';
import { User } from './interfaces/user.interface';
@Injectable()
export class UsersService {private readonly users: User[] = [];create(user: User) {this.users.push(user);}findAll(): User[] {return this.users;}
}
之前文章提到过可以使用命令快速创建一个服务
nest g service users
控制器中如何使用服务
import { Controller, Get, Post, Body } from '@nestjs/common';
import { CreateUserDto } from './dto/create-user.dto';
import { UsersService } from './users.service';
import { User } from './interfaces/user.interface';
@Controller('users')
export class CatsController {constructor(private usersService: UsersService) {}@Post()async create(@Body() createUserDto: CreateUserDto) {this.usersService.create(createUserDto);}@Get()async findAll(): Promise<User[]> {return this.usersService.findAll();}
}
通过实例可以看出,控制器如果想要使用服务,只需要将服务通过依赖注入的方式注入到控制器中
construc