返回

NestJS 7.x 折腾记:构建应用程序的指南

前端

用 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 提供了广泛的功能,例如依赖注入、模块化、测试和文档生成,帮助开发者构建更复杂、可扩展的应用程序。

常见问题解答

  1. NestJS CLI 有什么好处?
    NestJS CLI 简化了 NestJS 项目的创建和管理,通过命令提供丰富的功能。

  2. 提交门禁如何提高代码质量?
    提交门禁在代码提交之前执行检查,帮助确保遵守编码约定和最佳实践,从而提高代码库的整体质量。

  3. 控制器和服务在 NestJS 中扮演什么角色?
    控制器负责处理请求和生成响应,而服务封装应用程序的业务逻辑,提供更清晰的职责分离。

  4. 如何扩展 NestJS 应用程序?
    NestJS 的模块化架构允许通过添加新模块和功能轻松扩展应用程序,保持代码的可维护性和可扩展性。

  5. NestJS 适合哪些类型的应用程序?
    NestJS 适用于构建各种应用程序,包括 REST API、微服务、电子商务网站和实时聊天应用程序,使其成为各种项目的有力选择。