提供者
提供者是 Nest 中的一个基本概念。 许多基本的 Nest 类可以被视为提供者 – 服务、存储库、工厂、助手等。 提供者的主要思想是它可以是 injected 作为依赖; 这意味着对象之间可以创建各种关系,并且对象的 "接线" 实例的功能可以在很大程度上委托给 Nest 运行时系统。
在上个章节我们为创建了user模块并自动生成了CURD代码,我们看到在生成的代码中,任何业务逻辑的处理都并非在user.controller.ts文件中,而是放在了user.service.ts文件下
服务
在user.service.ts文件里,导出了一个UserService,我们将其简称服务, 该服务将负责数据存储和检索,并设计为供 UserController 使用,因此将其定义为提供者是一个很好的候选者。
import { Injectable } from '@nestjs/common'
import { CreateUserDto } from './dto/create-user.dto'
import { UpdateUserDto } from './dto/update-user.dto'
@Injectable()
export class UserService {
create(createUserDto: CreateUserDto) {
return 'This action adds a new user'
}
findAll() {
return `This action returns all user`
}
}我们的 UserService 是一个具有一个属性和两个方法的基本类。 唯一的新特性是它使用了 @Injectable() 装饰器。 @Injectable() 装饰器附加元数据,它声明 CatsService 是一个可以由 Nest IoC 容器管理的类
现在我们有了一个检索用户user的服务类,让我们在 UserController 中使用它:
import {
Controller,
Get,
Ip,
HostParam,
Session,
Header,
Post,
HttpCode,
Redirect,
} from '@nestjs/common'
import { UserService } from './user.service'
import { CreateUserDto } from './dto/create-user.dto'
import { UpdateUserDto } from './dto/update-user.dto'
@Controller('user')
export class UserController {
constructor(private readonly userService: UserService) {}
@Get('')
findAll() {
return this.userService.findAll()
}
}UserService 是 injected 通过类构造函数。 请注意 private 语法的使用。 这种简写允许我们立即在同一位置声明和初始化 UserService 成员。
依赖注入
Nest 是围绕通常称为 依赖注入 的强大设计模式构建的。 我们建议阅读官方 Angular 文档中有关此概念的精彩文章。
在 Nest 中,由于 TypeScript 的功能,管理依赖非常容易,因为它们只是按类型解析。 在下面的示例中,Nest 将通过创建并返回 UserService 的实例来解析 userService(或者,在单例的正常情况下,如果已在其他地方请求过,则返回现有实例)。 此依赖已解析并传递给控制器的构造函数(或分配给指示的属性)
constructor(private readonly userService: UserService) { }现在,UserService 服务已经注册进来了,之后就可以正常调用UserService 下的方法了
findAll() {
return this.userService.findAll()
}至此,本章节的学习就到此结束了,如有疑惑,可对接技术客服进行相关咨询。