
NestJS 的魅力之一,就是它的装饰器(Decorator)体系。
常见的有 @Controller()、@Injectable()、@Get()、@Post()…
但是很多新手会混淆:类装饰器 和 方法装饰器 到底有什么区别?
今天我们用通俗易懂的语言 + 图文,帮你一次搞清楚。

1️⃣ 装饰器是什么?
装饰器本质上就是一个函数,用来给类、方法、属性、参数加上"元数据"或"额外行为"。
📌 类比:
>
就像给建筑物贴标签、加功能模块,让别人(或者框架)知道它的作用,并在合适的时机触发它。
2️⃣ 类装饰器(Class Decorator)
✅ 概念
- 贴在类上的装饰器
- 用于标记、注册或改造整个类
- NestJS 用它来识别 控制器、服务、模块
💻 代码示例
import { Controller, Injectable } from '@nestjs/common';
@Controller('users') // 类装饰器
export class UserController {
// ...
}
@Injectable() // 类装饰器
export class UserService {
// ...
}
🏠 生活类比
类装饰器就像给整栋楼挂招牌\
@Controller('users')→ “这是用户服务楼,入口是/users”\@Injectable()→ “这是工具楼,别人可以直接来用”
3️⃣ 方法装饰器(Method Decorator)
✅ 概念
- 贴在类方法上的装饰器
- 用于绑定路由、添加拦截、权限控制等功能
💻 代码示例
import { Controller, Get, Post } from '@nestjs/common';
@Controller('users')
export class UserController {
@Get() // 方法装饰器
findAll() {
return '返回所有用户';
}
@Post()
createUser() {
return '创建用户';
}
}
🚪 生活类比
方法装饰器就像给楼里的某个门贴标签\
@Get()→ 这是 GET 请求的门\@Post()→ 这是 POST 请求的门\@UseGuards(AuthGuard)→ 进门前要刷门禁卡
4️⃣ 类装饰器 vs 方法装饰器 对比表
对比项 类装饰器 方法装饰器
作用对象 整个类 类中的某个方法
常见用途 标记控制器、服务、模块 绑定路由、加权限、加拦截
执行时机 类定义完成时 类定义完成时(方法级)
NestJS例子 @Controller()、@Injectable() @Get()、@Post()、@UseGuards()
生活类比 挂招牌 门口贴标签
5️⃣ 请求流中的类装饰器 & 方法装饰器
客户端发起 HTTP 请求
路由解析
类装饰器 @Controller()
确定控制器和路由前缀
方法装饰器 @Get()/@Post()
绑定具体请求方法和路径
参数装饰器 @Body() / @Param()
获取并验证请求数据
Controller 方法执行
调用 Service
类装饰器 @Injectable()
Service 被自动注入
业务逻辑 & 数据库交互
返回结果
方法装饰器(可附加拦截器/守卫)
格式化或限制响应
响应返回客户端
6️⃣ NestJS 装饰器全景地图
客户端发起 HTTP 请求
Middleware 中间件
非装饰器,处理日志/CORS/解析 Body
Guards 守卫 (类/方法级)
@UseGuards() 权限验证
Interceptors 前置 (类/方法级)
@UseInterceptors() 请求拦截
Pipes 管道 (参数级)
@Body() / @Param() / @Query() 验证与转换
Controller 方法
类装饰器 @Controller()
方法装饰器 @Get() / @Post()
Service 执行
类装饰器 @Injectable()
属性装饰器 @Inject() 指定注入
Repository / 外部 API 调用
返回 Controller
Interceptors 后置 (类/方法级)
格式化响应 / 映射 DTO
Exception Filters 异常过滤器
@Catch() 统一异常处理
响应返回客户端
7️⃣ 总结记忆法
- 类装饰器 → “这是什么楼”\
- 方法装饰器 → “楼里的哪道门”\
- 属性装饰器 → “房间里的家具从哪来”\
- 参数装饰器 → “门口进来的包裹怎么拆”
💡 记住这个类比,你在写 NestJS 时就不会混淆它们了。
订阅 FreeMac
每周精选:Mac 高效技巧、免费替代付费软件、开发者工具推荐。用对你的 MacBook,省钱 + 提效。