Skip to content

Nest 实践(一)

为什么说 NestJS 是 Node 世界的 Spring?

它们思想几乎一样:

SpringNestJS
ControllerController
ServiceService
ModuleModule
IOCDI
注解装饰器
分层分层

意义:

Node 第一次有了真正的“企业级框架标准”

NestJS 适合什么场景?

✅ 中大型项目
✅ 企业后台系统
✅ 微服务
✅ 团队协作
✅ 长期维护
✅ 架构规范要求高

不适合:
❌ 小脚本
❌ 极简 API
❌ 快速临时服务

NestJS 的核心理念

1️⃣ 分层架构(像 Spring)

Controller → Service → Module → Repository

例子:

ts
@Controller("users")
export class UserController {
  constructor(private userService: UserService) {}

  @Get()
  findAll() {
    return this.userService.findAll();
  }
}

2️⃣ 依赖注入(DI)

ts
constructor(private userService: UserService) {}

你不用自己 new 对象,框架帮你管理生命周期。

意义:

解耦、可测试、可维护

3️⃣ 强类型(TypeScript)

  • 编译期发现错误
  • IDE 自动补全
  • 企业更安全

4️⃣ 模块化(Module)

UserModule
AuthModule
OrderModule

像拼积木一样搭系统。

安装使用步骤

(一)安装运行的步骤

  1. 初始化项目
bash
$ npm i -g @nestjs/cli
$ nest new project-name

An image

  1. 启动项目
bash
$ cd project-name
$ npm run start

修改端口为:3333 An image

运行项目后,访问 http://localhost:3333 An image

访问 http://localhost:3333 An image

  1. 创建模块
bash
$ nest generate module user
  1. 创建控制器
bash
$ nest generate controller user
  1. 创建服务
bash
$ nest generate service user
  1. 创建 DTO
bash
$ nest generate class user.dto

An image

An image

注意

通过以上命令生成的文件是空的模版文件,需要手动增加/修改代码逻辑。

(二)生成带有默认代码逻辑的文件

如果要想直接生成默认带有代码逻辑的文件,可以使用以下命令:

bash
# 注意这里的 `resource`
$ nest generate resource users

An image

An image

An image

An image

(三)修改代码逻辑(Mock 数据)

  1. 修改 users.service.ts
typescript
import { Injectable } from "@nestjs/common";
import { CreateUserDto } from "./dto/create-user.dto";
import { UpdateUserDto } from "./dto/update-user.dto";

@Injectable()
export class UsersService {
  create(createUserDto: CreateUserDto) {
    return "This action adds a new user";
  }

  findAll() {
    // 2. 返回Mock数据
    return [
      {
        id: 1,
        name: "John Doe",
        email: "john.doe@example.com",
      },
      {
        id: 2,
        name: "Jane Doe",
        email: "jane.doe@example.com",
      },
    ];
    // 1. 注释原有代码逻辑
    // return `This action returns all users`;
  }

  findOne(id: number) {
    return `This action returns a #${id} user`;
  }

  update(id: number, updateUserDto: UpdateUserDto) {
    return `This action updates a #${id} user`;
  }

  remove(id: number) {
    return `This action removes a #${id} user`;
  }
}

(四)重新启动服务

bash
$ npm run start

得到 Mock 数据的展示效果 An image