【NestJS】NestJS后端开发全指南

🚀 NestJS 后端知识体系(完整版)


🧩 一、NestJS 是什么?

NestJS = Node.js + TypeScript + 依赖注入 + 模块化架构

它让 Node 后端从“脚本堆叠”变成了“工程体系”,
不再是 app.get('/user') 这种扁平代码,而是:

  • 有模块(Module)
  • 有控制器(Controller)
  • 有服务层(Service)
  • 有依赖注入(DI)
  • 有守卫、中间件、拦截器等企业级机制

通俗说:

如果 Express 是“路边摊”,Nest 就是“餐厅厨房”,流程规范、模块清晰。


🧱 二、NestJS 核心结构

npx @nestjs/cli new backend
cd backend
pnpm run start:dev

创建后生成的项目结构:

src/
├── main.ts                 # 启动入口
├── app.module.ts           # 根模块
├── app.controller.ts       # 控制器(接收请求)
├── app.service.ts          # 服务层(业务逻辑)

你可以这样理解这几个概念 👇

概念作用类比
Module模块化组织代码文件夹 / 功能区
Controller定义路由入口前端的 Router
Service负责业务逻辑和数据处理Vue/React 中的 composable / store
Provider可被注入的类(Service 属于 Provider)可复用服务
main.ts启动程序Vue 的 createApp / ReactDOM.render

⚙️ 三、核心文件讲解

1️⃣ 启动入口 main.ts

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(3000);
}
bootstrap();

相当于创建并运行一个 HTTP 服务器(基于 Express 或 Fastify)。


2️⃣ 模块(Module)

模块是 Nest 的“分区概念”。
每个模块代表一个业务功能,比如 UserModule, AuthModule, PostModule

import { Module } from '@nestjs/common';
import { UserController } from './user.controller';
import { UserService } from './user.service';

@Module({
  controllers: [UserController],
  providers: [UserService],
})
export class UserModule {}

controllers 注册路由入口
providers 注册可注入的逻辑类


3️⃣ 控制器(Controller)

控制器负责接收 HTTP 请求并返回响应。

import { Controller, Get, Post, Body, Param } from '@nestjs/common';
import { UserService } from './user.service';

@Controller('user')
export class UserController {
  constructor(private userService: UserService) {}

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

  @Post()
  create(@Body() dto: any) {
    return this.userService.create(dto);
  }

  @Get(':id')
  findOne(@Param('id') id: string) {
    return this.userService.findOne(id);
  }
}

4️⃣ 服务层(Service)

逻辑层(与数据库、外部 API、算法逻辑交互):

import { Injectable } from '@nestjs/common';

@Injectable()
export class UserService {
  private users = [];

  findAll() {
    return this.users;
  }

  create(dto) {
    this.users.push(dto);
    return dto;
  }

  findOne(id: string) {
    return this.users.find((u) => u.id === id);
  }
}

@Injectable() 让这个类能被 Controller 注入使用。


🧠 四、核心装饰器(Decorators)

NestJS 以“装饰器”为核心,结构优雅:

装饰器用途示例
@Controller('user')定义路由前缀/user
@Get() / @Post()定义请求方法/user/:id
@Body()获取请求体POST body
@Param()获取路径参数/user/:id
@Query()获取查询参数/user?page=1
@Injectable()声明可被注入类用于 Service
@Module()定义模块功能划分
@UseGuards()权限控制守卫
@UseInterceptors()响应拦截拦截器
@UsePipes()参数验证DTO 校验

🧩 五、进阶功能模块

1️⃣ DTO + 验证(class-validator)

定义参数类型与校验规则:

import { IsEmail, IsString } from 'class-validator';

export class CreateUserDto {
  @IsString()
  name: string;

  @IsEmail()
  email: string;
}

控制器中使用:

@Post()
create(@Body() dto: CreateUserDto) {
  return this.userService.create(dto);
}

2️⃣ 中间件(Middleware)

类似 Express 的中间件:

import { Injectable, NestMiddleware } from '@nestjs/common';
import { Request, Response, NextFunction } from 'express';

@Injectable()
export class LoggerMiddleware implements NestMiddleware {
  use(req: Request, res: Response, next: NextFunction) {
    console.log(`[LOG] ${req.method} ${req.url}`);
    next();
  }
}

在模块中应用:

import { MiddlewareConsumer, Module, NestModule } from '@nestjs/common';

@Module({})
export class AppModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    consumer.apply(LoggerMiddleware).forRoutes('*');
  }
}

3️⃣ 守卫(Guard)— 权限控制

判断请求是否允许通过:

import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common';

@Injectable()
export class AuthGuard implements CanActivate {
  canActivate(context: ExecutionContext): boolean {
    const req = context.switchToHttp().getRequest();
    return req.headers.authorization === 'Bearer valid-token';
  }
}

应用到路由:

@UseGuards(AuthGuard)
@Get('profile')
getProfile() {
  return { user: 'admin' };
}

4️⃣ 拦截器(Interceptor)

在请求前后做统一处理,比如日志、响应包装:

import { Injectable, NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
import { map } from 'rxjs/operators';
import { Observable } from 'rxjs';

@Injectable()
export class TransformInterceptor implements NestInterceptor {
  intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
    return next.handle().pipe(map((data) => ({ success: true, data })));
  }
}

5️⃣ 异常过滤器(Filter)

捕获异常并自定义响应:

import { ExceptionFilter, Catch, ArgumentsHost, HttpException } from '@nestjs/common';

@Catch(HttpException)
export class HttpExceptionFilter implements ExceptionFilter {
  catch(exception: HttpException, host: ArgumentsHost) {
    const ctx = host.switchToHttp();
    const res = ctx.getResponse();
    const status = exception.getStatus();

    res.status(status).json({
      success: false,
      message: exception.message,
    });
  }
}

🧮 六、数据库集成(Prisma / TypeORM / Mongoose)

以 Prisma 为例:

pnpm add @prisma/client
pnpm add -D prisma
npx prisma init

prisma/schema.prisma

model User {
  id    Int    @id @default(autoincrement())
  name  String
  email String @unique
}

UserService 中:

import { PrismaClient } from '@prisma/client';
@Injectable()
export class UserService {
  prisma = new PrismaClient();
  findAll() {
    return this.prisma.user.findMany();
  }
}

🔒 七、认证与授权

  • @nestjs/jwt + passport-jwt
  • 登录时生成 token
  • 守卫中验证 token
  • 支持角色权限(RoleGuard)

⚡ 八、模块化架构推荐

src/
├── main.ts
├── app.module.ts
├── modules/
│   ├── user/
│   │   ├── user.controller.ts
│   │   ├── user.service.ts
│   │   ├── user.module.ts
│   ├── auth/
│   │   ├── auth.controller.ts
│   │   ├── auth.service.ts
│   │   ├── auth.module.ts
│
├── common/
│   ├── guards/
│   ├── interceptors/
│   ├── filters/
│   ├── pipes/
│
├── prisma/
│   ├── prisma.service.ts

🚧 九、常见扩展功能

功能模块
JWT 鉴权@nestjs/jwt
Swagger 文档@nestjs/swagger
ORM 支持TypeORM / Prisma
文件上传@nestjs/platform-express
WebSocket@nestjs/websockets
Redis 缓存@nestjs/cache-manager
队列任务@nestjs/bull
微服务@nestjs/microservices

🏁 十、总结与建议

层级关键职责
Controller接收请求、路由定义
Service核心业务逻辑
Module模块化管理
Guard权限认证
Interceptor响应包装、日志处理
Pipe参数验证
Filter异常捕获
Middleware请求预处理

🌟 NestJS 的最大魅力:
用前端思维(模块化 + 装饰器 + 注入)写后端代码,逻辑清晰、扩展轻松。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值