Nest:常用 15 个装饰器知多少?

nest 很多功能基于装饰器实现,我们有必要好好了解下有哪些装饰器:

创建 nest 项目:

bash 复制代码
nest new all-decorator -p npm

@Module({})

这是一个类装饰器,用于定义一个模块。

模块是 Nest.js 中组织代码的单元,可以包含控制器、提供者等:

@Controller() 和 @Injectable()

这两个装饰器也是类装饰器,前者控制器负责处理传入的请求和返回响应,后者定义一个服务提供者,可以被注入到控制器或其他服务中。

通过 @Controller、@Injectable 分别声明 controller 和 provider:

@Optional、@Inject

创建可选对象(无依赖注入),可以用 @Optional 声明一下,这样没有对应的 provider 也能正常创建这个对象。

注入依赖也可以用 @Inject 装饰器。

@Catch

filter 是处理抛出的未捕获异常,通过 @Catch 来指定处理的异常:

@UseXxx、@Query、@Param

使用 @UseFilters 应用 filter 到 handler 上:

除了 filter 之外,interceptor、guard、pipe 也是这样用:

@Body

如果是 post、put、patch** **请求,可以通过 @Body 取到 body 部分:

我们一般用 dto 定义的 class 来接收验证请求体里的参数。

@Put、@Delete、@Patch、@Options、@Head

@Put、@Delete、@Patch、@Options、@Head 装饰器分别接受 put、delete、patch、options、head 请求:

@SetMetadata

通过 @SetMetadata 指定 metadata,作用于 handler 或 class

然后在 guard 或者 interceptor 里取出来:

@Headers

可以通过 @Headers 装饰器取某个请求头或者全部请求头:

@Ip

通过 @Ip 拿到请求的 ip,通过 @Session 拿到 session 对象:

@HostParam

@HostParam 用于取域名部分的参数。

下面 host 需要满足 xxx.0.0.1 到这个 controller,host 里的参数就可以通过 @HostParam 取出来:

@Req、@Request、@Res、@Response

前面取的这些都是 request 里的属性,当然也可以直接注入 request 对象:

@Req 或者 @Request 装饰器,这俩是同一个东西。

使用 @Res 或 @Response 注入 response 对象,但是注入 response 对象之后,服务器会一直没有响应。

因为这时候 Nest 就不会把 handler 返回值作为响应内容了。我们可以自己返回响应:

Nest 这么设计是为了避免相互冲突。

如果你不会自己返回响应,可以设置 passthrough 为 true 告诉 Nest:

@Next

除了注入 @Res 不会返回响应外,注入 @Next 也不会。

当你有两个 handler 来处理同一个路由的时候,可以在第一个 handler 里注入 next,调用它来把请求转发到第二个 handler。

@HttpCode

handler 默认返回的是 200 的状态码,你可以通过 @HttpCode 修改它:

@Header

当然,你也可以修改 response header,通过 @Header 装饰器:

相关推荐
小蒜学长几秒前
基于SpringBoot和Vue的低卡食品销售系统的设计与实现(代码+数据库+LW)
java·后端·springboot·健康管理·低卡食品销售系统
白起那么早5 分钟前
idea 插件-把数据库的表画出来
数据库·后端·intellij idea
linux_cfan10 分钟前
videojs v10 源代码系列解读:30 · `SerialRunner` 与 `ConcurrentRunner`
前端
liangshanbo121510 分钟前
面试题:页面需要发起大量 Ajax / HTTP 请求时,如何优化请求性能?
前端·http·ajax
蓝宝石的傻话11 分钟前
onvif-go(mickeyzzc/onvif-go v2)完整参考手册:从建工程到写出自己的 NVR 接入
开发语言·后端·golang
喵个咪11 分钟前
GoWind Admin|风行 — 开箱即用的企业级全栈中后台框架:AI 模块
后端·go·ai编程
喵个咪13 分钟前
GoWind Admin|风行 — 开箱即用的企业级全栈中后台框架:AK/SK 机器凭证
后端·安全·架构
lyz24685940 分钟前
vue3页面因参数未声明而报错的常犯错误
前端·javascript·vue.js
摸爬滚打的小李43 分钟前
流程图同步AI生成
前端
Hilaku1 小时前
我重写了整个项目,但没人感谢我!
前端·javascript·程序员