NestJS 7.x 折腾记:构建应用程序的指南
2023-12-13 16:45:32
用 NestJS 构建可靠、可扩展的应用程序
在当今飞速发展的技术时代,构建可靠、可扩展且易于维护的应用程序至关重要。NestJS 作为一项备受欢迎的 JavaScript 框架,以其模块化、可测试性和可扩展性而著称,为开发者构建基于 Node.js 的应用程序提供了极大便利。
安装 NestJS CLI
踏上 NestJS 之旅的第一步便是安装 NestJS CLI(命令行界面),用于轻松创建和管理 NestJS 项目。通过在终端中运行以下命令安装 NestJS CLI:
npm install -g @nestjs/cli
创建一个新的 NestJS 项目
接下来,在终端中创建一个新的 NestJS 项目。导航至希望创建项目的位置,然后运行以下命令:
nest new my-nest-project
这将创建一个名为 "my-nest-project" 的新文件夹,其中包含所有必要的 NestJS 文件。
清晰的项目结构
NestJS 项目的结构清晰明了,易于理解。它主要分为以下部分:
- src :包含应用程序的源代码。
- node_modules :包含项目所需依赖项。
- package.json :包含项目基本信息,例如名称、版本和依赖项。
- tsconfig.json :包含 TypeScript 编译器的配置信息。
- nest-cli.json :包含 NestJS CLI 的配置信息。
提交门禁
什么是提交门禁?
提交门禁是一种工具,用于在代码提交至版本控制系统之前对其进行检查,帮助确保代码符合特定质量标准,从而减少代码库中的错误,提高代码的可维护性。
在 GitHub Actions 上配置提交门禁
NestJS 项目可以使用 GitHub Actions 配置提交门禁。GitHub Actions 是一款功能强大的自动化平台,允许开发者在代码库中定义和执行各种工作流。
在项目中创建一个名为 ".github/workflows/commit-lint.yml" 的文件,定义工作流。该文件使用 Commitlint 来检查提交消息的格式和内容。
示例工作流:
name: Commit Lint
on: [push]
jobs:
commit-lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: wagoid/commitlint-github-action@v4
此工作流在每次代码推送到代码库时运行,使用 Commitlint 检查提交消息的格式和内容,并报告任何违规行为。
构建一个简单的 REST API
控制器
在 NestJS 中,控制器负责处理客户端请求并返回响应。在 src/controllers 文件夹中创建一个新的 TypeScript 文件,例如 "user.controller.ts":
import { Controller, Get, Post, Body } from '@nestjs/common';
@Controller('users')
export class UserController {
@Get()
findAll() {
return [];
}
@Post()
create(@Body() userDto: CreateUserDto) {
return userDto;
}
}
此控制器定义了两个端点:GET /users 用于获取所有用户,POST /users 用于创建新用户。
服务
服务在 NestJS 中负责应用程序的业务逻辑。在 src/services 文件夹中创建一个新的 TypeScript 文件,例如 "user.service.ts":
import { Injectable } from '@nestjs/common';
@Injectable()
export class UserService {
findAll() {
return [];
}
create(userDto: CreateUserDto) {
return userDto;
}
}
此服务定义了两个方法:findAll() 用于获取所有用户,create() 用于创建新用户。
连接控制器和服务
通过在控制器中注入服务将控制器和服务连接起来。在 UserController 中注入 UserService:
import { Controller, Get, Post, Body, Injectable } from '@nestjs/common';
import { UserService } from './user.service';
@Controller('users')
export class UserController {
constructor(private readonly userService: UserService) {}
@Get()
findAll() {
return this.userService.findAll();
}
@Post()
create(@Body() userDto: CreateUserDto) {
return this.userService.create(userDto);
}
}
现在,当客户端调用 GET /users 端点时,UserController 调用 UserService 的 findAll() 方法获取所有用户。类似地,当客户端调用 POST /users 端点时,UserController 调用 UserService 的 create() 方法创建新用户。
总结
本文介绍了 NestJS 项目初始化、提交门禁配置、构建 REST API 的基础知识。NestJS 提供了广泛的功能,例如依赖注入、模块化、测试和文档生成,帮助开发者构建更复杂、可扩展的应用程序。
常见问题解答
-
NestJS CLI 有什么好处?
NestJS CLI 简化了 NestJS 项目的创建和管理,通过命令提供丰富的功能。 -
提交门禁如何提高代码质量?
提交门禁在代码提交之前执行检查,帮助确保遵守编码约定和最佳实践,从而提高代码库的整体质量。 -
控制器和服务在 NestJS 中扮演什么角色?
控制器负责处理请求和生成响应,而服务封装应用程序的业务逻辑,提供更清晰的职责分离。 -
如何扩展 NestJS 应用程序?
NestJS 的模块化架构允许通过添加新模块和功能轻松扩展应用程序,保持代码的可维护性和可扩展性。 -
NestJS 适合哪些类型的应用程序?
NestJS 适用于构建各种应用程序,包括 REST API、微服务、电子商务网站和实时聊天应用程序,使其成为各种项目的有力选择。