NestJS

2025年3月17日 | 阅读 7 分钟
NestJS

欢迎来到NestJS教程。本教程旨在帮助您全面了解NestJS。您将从初学者级别开始学习,涵盖所有细微之处,帮助您完成安装,从零开始创建NestJS应用程序,并学习如何在日常场景中处理和实现。让我们开始吧。

什么是NestJS?

NestJS 是一个非常流行且全面的 JavaScript 框架,它运行在Node.js的底层,用于构建可扩展、可靠高效的服务器端应用程序。该框架基于Node.js环境,并完全支持TypeScript。它也可以通过Node.js的影响来扩展到使用Express.js。由于NestJS是一个完全支持TypeScript的框架,它可以让您像开发者一样完全用JavaScript编码,并允许您结合面向对象编程(OOP)、函数响应式编程(FRP)和纯函数式编程(FP)的概念。

幕后

您可能不知道NestJS的某些基本构建块。具体来说,NestJS在强大的HTTP基础设施的底层大量使用像Express这样的服务器端框架。它也可以选择性地配置为使用Fastify,尽管Express被认为是默认选项。

NestJS旨在为开发人员提供一定程度的抽象机制,这样不仅可以整合内部的通用服务器端框架,如FastifyExpress,还可以暴露给开发人员选择的API。这些隐藏的层允许您像开发人员一样,可以自由地广泛使用第三方模块,并将它们置于NestJS平台之下,而无需操纵整个服务器端。

安装

在开始使用NestJS创建后端应用程序之前,您需要确保您的本地计算机上已安装Nest CLI。如果尚未安装,请使用Node Package Manager(NPM)并按照以下命令的步骤进行操作。

不过,您可能需要确保Node.js和NPM已预装在您的本地系统中。如果没有,请按照 https://node.org.cn/ 上的说明安装Node.js。

一旦NestJS CLI安装完成,它就可以随时使用命令了。由于您是实际学习,请考虑创建一个小的NestJS项目,以便您可以动手实践并应用知识。要继续创建一个示例项目,请使用以下命令进行初始化。

执行此命令后,将在当前位置创建一个名为my-nestjs-01的新文件夹,并将所有默认项目模板下载到该文件夹中。

项目结构

在为项目创建文件夹后,会创建NestJS的node模块以及其他样板依赖项,其中包括几个核心程序文件。这些核心文件可以从下面的图片中看到。它包含各种重要的源代码,这些源代码将在下面讨论。

NestJS

在上图的截图中,您可以直观地看到所有文件和依赖项,其中一些是核心文件。图中最重要的文件是src文件夹。这是TypeScript文件的仓库,您可以在其中找到应用程序代码。在此项目中,您将花费大部分时间在src文件夹中。所有这些核心文件将在下面讨论。

main.ts:这是应用程序的入口点。它包含一个NestFactory.create()方法,该方法创建一个Nest应用程序的新实例。

app.modules.ts:它包含应用程序实现的模块。

app.controller.ts:它只包含一个NestJS的路由实现控制器。

app.services.ts:这是通常的服务方法实现。

app.controller.specs.ts:这是控制器的测试文件。

现在,让我们仔细看看包含默认实现方法的main.ts文件。

在上面的代码中,首先,将NestFactory方法作为应用程序的入口点导入。接下来,从之前讨论的app.module文件中导入AppModule。其次,将bootstrap标记为async并实现。导入bootstrap函数的主要目的是调用它来执行代码。

其次,当调用NestFactory.create()方法时,执行开始,并将AppModule作为参数传递给根应用程序模块。这将通过创建一个新的NestJS实例来附加一个模块。下一步是使用Web服务器上的事件侦听器方法,以端口3000启动服务器。此方法将返回一个Promise,表明服务器已成功启动,并使用await关键字。

现在,您需要移动到根应用程序的实现,其中包含可在app.module.ts文件中找到的模块。其中的代码包含以下内容。

在上面的代码片段中,AppModule被导入为一个方法,并且@Module装饰器从@nestjs/共享库导入。传递的@Module装饰器包含三个属性:imports、controllers和providers。

AppModule中指定的控制器应始终是应用程序开发初期分配给该属性的数组的一部分,因为控制器的数量限制为AppController,它是根模块。此外,服务应在AppModule中随时可用,因此应列在分配给providers属性的数组中。

接下来,我们将查看AppController及其在app.controller.ts中的实现。代码如下。

上面的代码片段简单演示了NestJS中的一个控制器,它只包含一个GET路由。通过添加@Controller装饰器,类可以成为一个控制器。它也从@nestjs/导入,这是一个通用的库。

这里的重点是清楚地理解控制器通常依赖于服务类。在给定的示例中,AppController使用Appservice来实现app.services.ts文件,方法是导入顶部添加的相应语句。

然而,将AppService插入AppController的过程基于依赖注入方法,该方法默认添加相同类型的参数。然后实现一个默认路由,通过@Get装饰器处理HTTP GET请求,以实现getHello方法。因此,该方法由AppService提供支持,以获取数据并执行请求和响应操作,同时返回结果。

现在让我们转到下一个文件,观察app.services.ts文件。

上面的代码片段简单演示了NestJS中的一个控制器,它只包含一个GET路由。通过添加@Controller装饰器,类可以成为一个控制器。它也从@nestjs/导入,这是一个通用的库。

这里的重点是清楚地理解控制器通常依赖于服务类。在给定的示例中,AppController使用Appservice来实现app.services.ts文件,方法是导入添加在顶部的相应语句。

然而,将AppService插入AppController的过程基于依赖注入方法,该方法默认添加相同类型的参数。然后实现一个默认路由,通过@Get装饰器处理HTTP GET请求,以实现getHello方法。因此,该方法由AppService提供支持,以获取数据并执行请求和响应操作,同时返回结果。

现在让我们转到下一个文件,观察app.services.ts文件。

NestJS应用程序看起来是这样的。

NestJS

上面的图像没有意外。输出"Hello World!"是从getHello方法提供的服务中检索到的字符串,然后通过相应的控制器方法作为HTTP GET响应返回。

总结

本教程足以涵盖NestJS学习的所有方面及其在现实生活中的应用,从安装到创建示例应用程序。在本教程中,您学习了NestJS的应用是什么,它多久使用一次,以及通常在哪里实际实现它。虽然NestJS在JavaScript开发人员中并不特别有用,但由于它完全支持TypeScript,许多开发人员利用其动态代码来解决设计模式问题。随着Node.js依赖性的增加,NestJS越来越受欢迎,它在底层运行,并与Express等框架一起使用。为了便于理解,您学习了如何通过导入本文讨论的所有核心文件来开发NestJS应用程序。也可以通过使用某些模块来实现应用程序,例如添加课程,使用Postman进行测试,以及控制端点的流程。