NestJs👈 | 前端spring🤔| 项目创建与项目结构解析

NestJs 是一个用于构建高效、可扩展的服务器端应用程序的渐进式 Node.js 框架

有道是前端的 spring 框架 🤡 ~ (类比 java spring 全家桶👈) , 说是如此说 , 官网已经声明 , 它是仿Angular , AOP 思想很明显 👈

以下从其特点、核心概念、应用场景等方面进行介绍:

官网 : nest.nodejs.cn/

了解 NestJs

特点

  • 强大的类型支持:基于 TypeScript 构建,利用 TypeScript 的静态类型检查功能,能在开发阶段提前发现许多潜在错误,提高代码的稳定性和可维护性,同时为开发者提供了更好的代码智能提示和自动完成功能,提升开发效率。
  • 依赖注入机制:采用依赖注入模式,使得代码的各个模块之间的依赖关系更加清晰,易于管理和维护。各个模块可以通过依赖注入的方式获取所需的其他模块或服务,降低了模块之间的耦合度,提高了代码的可测试性和可扩展性。
  • 丰富的插件生态:拥有大量的第三方插件和库,涵盖了数据库操作、身份验证、文件上传、消息队列等几乎所有常见的后端开发需求。可以方便地与各种数据库(如 MySQL、MongoDB 等)、消息队列系统(如 RabbitMQ、Kafka 等)进行集成。
  • 支持多种平台:可以在多种环境中运行,包括服务器端、浏览器端以及移动应用开发中的后端服务等。可以轻松地部署到传统的服务器环境,也可以适应云原生架构,在容器化环境(如 Docker、Kubernetes)中运行。

核心概念

  • 模块(Modules) :是 NestJs 应用的基本构建块,用于组织和分组相关的代码。每个模块都有一个明确的职责,可以包含控制器、服务、中间件、守卫等。
  • 控制器(Controllers) :主要负责处理 HTTP 请求和响应。它定义了应用的路由路径和对应的处理函数,接收客户端发送的请求,调用相应的服务方法来处理业务逻辑,并将结果返回给客户端。
  • 服务(Services) :用于封装具体的业务逻辑。它通常与数据库交互、进行数据处理、调用其他外部服务等。服务可以被控制器或其他服务注入和调用,以实现业务功能的复用。
  • 中间件(Middleware) :在请求到达控制器之前或响应返回给客户端之前执行的函数,用于对请求和响应进行预处理或后处理。
  • 守卫(Guards) :用于实现身份验证和授权功能。可以在路由级别或控制器级别使用守卫来保护应用的资源,只有通过身份验证和具有相应权限的用户才能访问受保护的路由。

应用场景

  • 企业级 Web 应用:适用于构建大型的企业级 Web 应用,能够很好地处理复杂的业务逻辑、大量的用户请求以及与各种后端系统的集成。
  • 微服务架构:非常适合用于构建微服务架构的应用,每个微服务可以作为一个独立的 NestJs 应用,通过 HTTP、gRPC 等通信方式进行交互。
  • 实时应用:可以与 WebSocket 等技术结合,用于构建实时应用,如在线聊天、实时数据监控、游戏服务器等。
  • 移动应用后端:为移动应用提供稳定、高效的后端支持,处理用户注册登录、数据存储和查询、推送通知等业务逻辑。

对比

优势

  1. 与JavaScript生态深度融合:NestJs基于JavaScript/TypeScript,能和前端技术栈无缝衔接,全栈开发时可共享代码逻辑与数据模型,减少开发和沟通成本,这方面Java集成相对复杂;和Python相比,NestJs构建前后端一体化应用更便捷,能更好利用前端JavaScript优势。
  2. 轻量级与快速开发:NestJs轻量级、启动快、开发效率高,适合快速迭代的中小型项目,比Java相对更轻便、配置启动更简单;在Web开发中,其架构清晰、代码组织规范,相比Python的Flask等框架,构建大型项目时更易维护和扩展。
  3. 基于依赖注入的可测试性:NestJs依赖注入机制和JavaScript模块化系统结合紧密,代码可测试性更高,测试代码编写更简洁直观,Java测试代码相对冗长;相比Python,NestJs的依赖注入框架更利于单元和集成测试,能提升代码质量和稳定性。

劣势

  1. 性能方面:处理高并发、大规模数据和复杂业务逻辑时,Java性能优势明显,其JVM优化成熟,内存管理和垃圾回收高效,NestJs可能存在性能瓶颈;在数据科学和数值计算领域,Python有高性能库,NestJs不适合这类复杂计算任务。
  2. 技术生态和成熟度:Java技术生态成熟,有Java EE体系和大量开源框架,解决方案完备,NestJs技术生态较新,复杂场景解决方案不够成熟;Python在数据科学、人工智能等领域优势显著,有丰富库和框架,NestJs在这方面不及Python。
  3. 人才储备和社区支持:Java社区庞大活跃,开发者众多,企业招聘容易,NestJs社区活跃度和人才数量较少;Python社区活跃,开源项目和库丰富,人才市场上Python开发者数量增长迅速,NestJs在这方面处于劣势。

初始化

1. 安装 Nest CLI

Nest CLI 是一个强大的命令行工具,可以帮助你快速创建和管理 Nest.js 项目。你可以通过 npm 全局安装 Nest CLI:

bash 复制代码
npm install -g @nestjs/cli
3. 创建新项目

使用 Nest CLI 创建一个新的 Nest.js 项目非常简单。你只需要运行以下命令:

arduino 复制代码
nest new project-name

在这里,将 project-name 替换为你的项目名称。运行该命令后,CLI 会提示你选择包管理器(npm 或 yarn),选择你喜欢的包管理器,然后 CLI 会自动为你安装项目依赖。

4. 运行项目

进入项目目录并启动开发服务器:

arduino 复制代码
cd project-name
npm run start

默认情况下,Nest.js 应用会在 http://localhost:3000上运行

项目结构

项目成功初始化后 , 项目结构如下 :

以下是对该NestJS项目结构中各文件及文件夹作用的详细解析:

文件夹

  • dist:存放编译后的文件。NestJS项目常使用TypeScript编写,该目录是TypeScript代码经编译转化为JavaScript后的输出位置。在项目运行时,实际执行的是此目录下的代码。
  • node_modules:用于存储项目所依赖的第三方包。开发过程中用到的各类NestJS相关模块、工具库等,比如处理HTTP请求的库、数据库连接库、各种辅助功能的插件等,都会被安装到这个目录中。
  • src:项目的核心源代码目录,包含了应用的主要业务逻辑、模块定义、控制器、服务等关键代码。开发者主要在此目录下进行功能开发工作,例如创建新的模块来处理特定业务场景、编写控制器以处理客户端请求、编写服务来实现具体的业务逻辑等。
  • test:专门用于存放测试代码的目录。在这里可以编写单元测试、集成测试等各种类型的测试用例,目的是确保项目代码的质量和稳定性,验证各个功能模块是否能够按照预期正常工作。

src目录下的文件

  • app.controller.spec.ts:这是app.controller.ts对应的测试文件。通常用于编写针对AppController的单元测试或集成测试用例,以验证AppController中各个方法的功能是否正确,比如检查控制器对不同请求的响应是否符合预期等。
  • app.controller.ts:定义了应用的控制器(Controller)。控制器负责处理传入的HTTP请求,并返回相应的响应。它通常包含多个处理不同路由的方法,这些方法会调用对应的服务来获取数据或执行特定的业务逻辑,然后将处理结果返回给客户端。
  • app.module.ts:应用的根模块(Module)文件。在NestJS中,模块是组织代码的基本单元,它可以将相关的控制器、服务、组件等组合在一起,管理它们的生命周期和依赖关系。AppModule通常会导入应用所需的其他模块,并声明本模块中使用的控制器、服务等。
  • app.service.ts:定义了应用的服务(Service)。服务用于封装具体的业务逻辑,控制器会调用服务中的方法来完成特定的业务操作,例如数据的获取、处理和存储等。服务可以被多个控制器共享,有助于提高代码的复用性和可维护性。
  • main.ts:应用的入口文件。它负责引导NestJS应用的启动,通常会创建Nest应用实例,导入根模块(如AppModule),并启动HTTP服务器来监听指定的端口,使应用能够接收和处理客户端的请求。

其他配置及说明文件

  • .eslintrc.js:ESLint的配置文件。ESLint是一个代码检查工具,此文件用于定义项目的代码规范和风格,例如缩进规则、变量命名规范、代码语法检查等。通过配置ESLint,可以帮助开发者保持代码风格的一致性,及时发现和修复代码中的潜在问题。
  • .gitignore:Git版本控制系统的忽略文件。用于指定哪些文件或目录不需要被Git跟踪,例如node_modules目录(因为其体积较大且可以通过package - json重新生成)、编译后的dist目录等。这样可以避免将不必要的文件提交到代码仓库中。
  • .prettierrc:Prettier的配置文件。Prettier是一个代码格式化工具,该文件用于配置代码格式化的规则,比如代码的缩进方式、换行规则、引号类型等。配置好后,代码在保存时会自动按照设定的格式进行调整,使代码更加美观和易读。
  • nest - cli.json:NestJS命令行工具的配置文件。用于配置NestJS CLI(Command - Line Interface)的相关参数,例如生成代码时的默认路径、模板等。借助这个配置文件,开发者可以更方便地使用命令行快速生成模块、控制器、服务等代码结构。
  • package - lock.json:记录了node_modules中每个包的确切版本信息。它的作用是确保团队成员在安装依赖包时,能够安装到与项目开发者完全相同版本的包,避免因依赖包版本差异而导致的问题。
  • package.json:项目的核心配置文件。其中包含了项目的元数据信息,如项目名称、版本、作者等;还记录了项目的依赖关系,dependencies字段记录生产环境下所需的依赖包,devDependencies字段记录开发环境下所需的依赖包;此外,还可以定义各种脚本命令,例如启动项目、运行测试等。
  • README.md:项目的说明文档。通常会包含项目的介绍、安装步骤、使用方法、示例代码等信息,目的是帮助其他开发者快速了解和使用该项目。
  • tsconfig.build.json:可能是用于项目构建时的TypeScript配置文件。它与项目的编译过程相关,可以指定一些编译选项,比如目标JavaScript版本、模块解析策略、路径映射等,以满足特定的构建需求。
  • tsconfig.json:项目整体的TypeScript配置文件。定义了TypeScript编译的各种选项,例如include字段指定哪些文件或目录需要被包含在编译范围内,exclude字段指定哪些需要被排除,compilerOptions中则定义了类型检查、模块系统、严格模式等众多编译相关的设置。

强迫症: 暂时关掉语法检查

开始可能会因为语法检查爆红 , 可以在.eslintrc.js 中暂时注释掉一下代码 :

玩耍

在浏览器中访问http://localhost:3000

我们一起找一下问什么返回 Hello world

找到 Controller 层

顺着他找到在 Service 层的 getHello

这里就是返回的结果 , 其实 NestJs 有着前端 spring 之称呼 , 看到这里 , 让人不禁想起 javaweb 中的经典三层架构用于分层解耦

总结

临时起意 , 看到 NestJs , 初始化一个 nest-start-demo 玩玩 , 之后会深入学习 ~ , 从基础到实战 !

相关推荐
一颗奇趣蛋11 分钟前
vue-router的query和params的区别(附实际用法)
前端·vue.js
孤城28616 分钟前
MAC电脑常用操作
前端·macos·快捷键·新手·电脑使用
木亦Sam16 分钟前
Vue DevTools逆向工程:自己实现一个组件热更新调试器
前端
酷酷的阿云17 分钟前
动画与过渡效果:UnoCSS内置动画库的实战应用
前端·css·typescript
dleei17 分钟前
使用docker创建gitlab仓库
前端·docker·gitlab
勤劳的代码小蜜蜂17 分钟前
大文件上传:告别传统传输瓶颈,让数据流转更高效
前端
前端大卫18 分钟前
Echarts 饼图的创新绘制技巧(附 Demo 和源码)
前端·javascript·echarts
芒猿君19 分钟前
AQS——同步器框架之源
后端
wiedereshen19 分钟前
Vue学习记录(十) --- Vue3综合应用
前端
展信佳_daydayup21 分钟前
Vue3项目部署到服务器
前端