首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >优雅,太优雅了!Nest.js 实在是太优雅了!

优雅,太优雅了!Nest.js 实在是太优雅了!

作者头像
萌萌哒草头将军
发布2025-05-02 22:32:00
发布2025-05-02 22:32:00
41800
代码可运行
举报
文章被收录于专栏:前端框架前端框架
运行总次数:0
代码可运行

前言

Node.js 生态里,如果你厌倦了 Express 的无结构混乱,又觉得 Koa 太轻量缺乏规范,那么 NestJS 或许正是你想要的答案。让你写 Node.js 像写 JavaSpringBoot 一样优雅。

正文

核心特性
  • 🚀 依赖注入(DI)容器:Nest 提供了强大的 DI 系统,让服务的创建与注入变得自然流畅
  • 🧩 模块化设计:每个功能单元都可以封装成模块,清晰分层,便于团队协作和代码复用
  • 🔧 强大的生态系统:Nest 提供 CLI 工具、GraphQL 支持、WebSocket、Microservices 模块等,满足各种场景
架构设计

NestJS 默认采用 MVC 架构,这一设计让 Nest 非常适合做企业级的微服务架构,也适合渐进式改造原有系统!

MVC 架构
MVC 架构

MVC 架构

上手体验

快速创建一个 Nest 项目只需两步:

代码语言:javascript
代码运行次数:0
运行
复制
npx --yes @nestjs/cli new services/api --package-manager pnpm
pnpm add prisma @prisma/client

如果你像我一样使用 prisma ,配置完 model 后还需要下面两步:

代码语言:javascript
代码运行次数:0
运行
复制
generator client {
  provider = "prisma-client-js"
}
datasource db {
  provider = "sqlite"
  url      = "file:./dev.db"
}
model User {
  id         Int      @id @default(autoincrement())
  username   String   @unique
  password   String
  is_admin   Boolean  @default(false)
}
代码语言:javascript
代码运行次数:0
运行
复制
npx prisma init
npx prisma generate

接着建议小伙伴,可以先定义一些全局的类,比如:Resposed、Table、 LoadMore

基于 User 模块的增删改查(CRUD)

用户模块是后端系统中最常见的业务模块之一,现在只需要关注 Controller 层处理路由,Service 层处理业务逻辑,Entity 的工作 Prisma 已经帮我们完成了!

完整代码看这里:https://github.com/mmdctjj/soundX/tree/master/services/api/src

代码语言:javascript
代码运行次数:0
运行
复制
// src/controllers/user.ts
@Controller()
exportclass UserController {
constructor(private readonly userService: UserService) {}
@Get('/user/list')
async getUserList(): Promise<ISuccessResponse<User[]> | IErrorResponse> {
    try {
      const useList = awaitthis.userService.getUserList();
      return {
        code: 200,
        message: 'success',
        data: useList,
      };
    } catch (error) {
      return {
        code: 500,
        message: error,
      };
    }
  }
}
代码语言:javascript
代码运行次数:0
运行
复制
// src/services/user.ts
import { Injectable } from'@nestjs/common';
import { User } from'@prisma/client';
import { PrismaClient } from'@prisma/client';

@Injectable()
exportclass UserService {
private prisma: PrismaClient;

constructor() {
    this.prisma = new PrismaClient();
  }

async getUserList(): Promise<User[]> {
    returnawaitthis.prisma.user.findMany();
  }
}
代码语言:javascript
代码运行次数:0
运行
复制
// src/app.module.ts
import { Module } from'@nestjs/common';
import { APP_INTERCEPTOR, APP_GUARD } from'@nestjs/core';
import { ConfigModule } from'@nestjs/config';
import { UserController } from'./controllers/user';
import { UserService } from'./services/user';

@Module({
  imports: [
    ConfigModule.forRoot(), // 自动读取 .env 文件
  ],
  controllers: [
    UserController,
  ],
  providers: [
    UserService,
  ],
})
exportclass AppModule {}

齐活!现在可以请求到数据了!

请求用户列表
请求用户列表

请求用户列表

JWT 登录鉴权流程,中间件的使用

JWT(JSON Web Token)是实现用户登录态管理的主流方式之一。在 NestJS 中,我们通常使用 @nestjs/passportpassport-jwt 模块实现 JWT 验证流程。

整个实现大致分为以下几个步骤:

下载依赖:

代码语言:javascript
代码运行次数:0
运行
复制
pnpm add @nestjs/passport passport passport-jwt
pnpm add passport-jwt @nestjs/jwt

新建对用的 auth 模块:

代码比较多,就不放这里了,感兴趣的小伙伴可以看这里!

https://github.com/mmdctjj/soundX/tree/master/services/api/src/auth

配置 model:

代码语言:javascript
代码运行次数:0
运行
复制
// src/app.module.ts
import { Module } from'@nestjs/common';
import { APP_INTERCEPTOR, APP_GUARD } from'@nestjs/core';
import { ConfigModule } from'@nestjs/config';
import { UserController } from'./controllers/user';
import { UserService } from'./services/user';
import { JwtAuthGuard } from'./auth/jwt-auth.guard';
import { AuthModule } from'./auth/auth.module';
import { AuthController } from'./auth/auth.controller';
import { AuthService } from'./auth/auth.service';

@Module({
  imports: [
    ConfigModule.forRoot(), // 自动读取 .env 文件
    AuthModule,
    JwtModule.register({
      secret: process.env.JWT_SECRET,
      signOptions: { expiresIn: '1d' },
    }),
  ],
  controllers: [
    UserController,
    AuthController,
  ],
  providers: [
    UserService,
    AuthService,
  ],
})
exportclass AppModule {}

齐活!现在请求接口,会得到 401

401 验证失败
401 验证失败

401 验证失败

这一整套流程非常契合企业级开发对安全性和规范性的要求。

最后

NestJS 的魅力在于让 Node.js 项目拥有可维护、可测试、可扩展的架构基础。如果你正在寻找一个可以在中大型项目中放心使用的 Node.js 框架,NestJS 是一个值得尝试的选择!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-04-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 萌萌哒草头将军 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 正文
    • 核心特性
    • 架构设计
    • 上手体验
      • 基于 User 模块的增删改查(CRUD)
      • JWT 登录鉴权流程,中间件的使用
  • 最后
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档