DZone>Web Dev Zone>NestJS供应商与实例
举例说明NestJS提供程序
在这篇文章中,我们将通过详细的例子来了解如何创建一个NestJS提供者,以了解我们如何在我们的应用程序中使用它们。
CORE -
21年8月30日 - Web Dev Zone -教程
喜欢 (1)
评论
保存
鸣叫
21次浏览
加入DZone社区,获得完整的会员体验。
在这篇文章中,我们将了解NestJS供应商以及如何在我们的应用程序中使用它们。
在上一篇文章中,我们研究了NestJS控制器。在学习NestJS的Providers之前,了解控制器是很重要的,因此,我建议你在开始这篇文章之前先看一下那篇文章。
1.NestJS提供器背后的概念
一般来说,Providers和NestJS背后的主要概念是依赖性注入。
但什么是依赖性注入?
简而言之,依赖注入是一种设计模式,在这种模式中,一个类从外部来源请求其依赖,而不是创建它们。这个外部来源可以是框架本身。
由于NestJS使用Typescript作为基础,管理依赖关系变得非常容易。
如果你来自其他框架的背景,比如Spring Boot,它使用了依赖注入,那么你会立刻明白。然而,即使你对这个话题完全陌生,我们也会看到详细的例子,使事情变得清晰。
提供者背后的主要想法是,它可以作为依赖关系被注入 。换句话说,对象之间可以形成关系。连接这些点的功能是留给NestJS运行系统的。
我想这是对依赖注入和提供者的足够描述。让我们来看看事情的实际情况。
2.创建一个服务
在上一篇文章中,我们了解了如何创建一个控制器类来处理进入的请求并提供响应。一个典型的应用程序通常不会这么简单。
通常情况下,将业务逻辑封装在一个单独的类中是很好的做法。这样一个类被称为服务。这个类的工作是处理控制器收到的请求并执行业务逻辑。
books.service.tsimport { Injectable } from "@nestjs/common"; import { Book } from '../interfaces/book.interface' @Injectable() export class BooksService { private readonly books: Book[] = []; create(book: Book) { console.log(book) this.books.push(book); } findAll(): Book[] { return this.books; } }
如果你看到上面,我们有一个名为BooksService的类。
这个类是做什么的?
嗯,它有两个方法--一个是创建新书,另一个是返回所有的书。没有什么花哨的东西。
这里需要注意的重要术语是类的签名上面的**@Injectable()** 装饰器。
现在,你可能想知道这个@Injectable()装饰器的作用是什么。
简单地说,这个装饰器将元数据附加到类上,使BooksService有可能被Nest IOC容器所管理。换句话说,它基本上使NestJS有可能在需要的地方注入这个类。
这里需要注意的另一件事是Book接口。我们在自己的文件中定义它,如下所示。
book.interface.tsexport interface Book { name: String, author: String }
3.注入依赖关系
现在我们的服务类已经准备好了,我们需要将其注入到我们的控制器中。
对于这个例子,我们创建一个新的NestJS控制器,如下所示。
book.controller.tsimport { Controller, Get, Body, HttpCode, Post} from "@nestjs/common"; import { Book } from "./interfaces/book.interface"; import { BooksService } from "./services/books.service"; @Controller('books') export class BookController { constructor(private booksService: BooksService) {} @Get() @HttpCode(200) async findAll(): Promise<Book[]> { return this.booksService.findAll() } @Post() @HttpCode(201) async create(@Body() book: Book){ this.booksService.create(book); } }
让我们把事情一步步分解开来。
- 这是一个典型的控制器,它有两个处理程序--一个用于获取所有书籍的GET请求,另一个用于创建新书的POST请求。
- 在这个类的构造函数中,我们注入一个BooksService的实例。基本上,我们是在告诉BookController需要一个BooksService的实例才能正常工作。
- 最后,我们使用BooksService中的方法来获取所有的书并创建一个新书。
4.注册NestJS提供者
现在,我们已经定义了提供者,即BooksService。我们也有了这个服务的消费者,即BookController。然而,我们仍然需要向Nest注册该服务,以便它可以执行注入。
在app.module.ts中,通过在**@Module()**装饰器的providers 数组中添加服务,完成这一注册,如下所示。
app.module.tsimport { Module } from '@nestjs/common'; import { AppController } from './app.controller'; import { ABCController } from './abc.controller'; import { AppService } from './app.service'; import { BookController } from './book.controller'; import { BooksService } from './services/books.service'; @Module({ imports: [], controllers: [AppController, ABCController, BookController], providers: [AppService, BooksService], }) export class AppModule {}
一旦上述配置到位,NestJS将能够自动解决依赖关系,并在应用程序启动时创建适当的实例。
总结
至此,我们已经成功地了解了NestJS Providers以及它们在利用依赖注入和反转控制的概念来连接依赖关系方面的用法。
在下一篇文章中,我们将研究NestJS模块,它可以帮助我们以更好的方式设计我们的应用程序。
如果你有任何意见或疑问,请在下面的评论区提出。
主题。
nestjs, nestjs基础知识, typescript, webdev, 教程
经Saurabh Dashora许可发表于DZone。点击这里查看原文。
DZone贡献者所表达的观点属于他们自己。
DZone上的热门文章
评论