跳至主要內容

提供者

刘春龙原创...大约 2 分钟NodejsNestjs教程文档

提供者是 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()
  }
}

UserServiceinjected 通过类构造函数。 请注意 private 语法的使用。 这种简写允许我们立即在同一位置声明和初始化 UserService 成员。

依赖注入

Nest 是围绕通常称为 依赖注入 的强大设计模式构建的。 我们建议阅读官方 Angular 文档中有关此概念的精彩文章。

在 Nest 中,由于 TypeScript 的功能,管理依赖非常容易,因为它们只是按类型解析。 在下面的示例中,Nest 将通过创建并返回 UserService 的实例来解析 userService(或者,在单例的正常情况下,如果已在其他地方请求过,则返回现有实例)。 此依赖已解析并传递给控制器的构造函数(或分配给指示的属性)

 constructor(private readonly userService: UserService) { }

现在,UserService 服务已经注册进来了,之后就可以正常调用UserService 下的方法了

findAll() {
    return this.userService.findAll()
}
上次编辑于:
贡献者: 刘春龙
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.7