《Nest系列 - 3. 掌握常见Nest 装饰器,奠定坚实基础!!!!!!》

nest 一个核心就是依赖注入,而中的大部分功能都是通过装饰器来实现的,那什么是装饰器呢? 就是一个 @xxx ,诸如 @Module,@controller, @Get, @Post

那这样有什么好处呢? 可以把他理解成一个方法,在不改变原有的代码逻辑情况下,添加额外的功能,比如日志记录,权限控制,数据验证,参数解析,等等,只需要使用@xxx(xx) 就做了一次逻辑处理。

所以装饰器是一种优雅的方式来修改和增强 类及其成员的行为。

按照上一节的学习顺序,我们先看最熟悉的装饰器模块装饰器/路由装饰器/请求体装饰器/响应体装饰器。不常用的这里也不做介绍,后面遇到再说 😄😄😄

模块装饰器

@Module(metadata):定义一个模块类,接受模块的元数据(如导入的模块,控制器,提供者 等)=》 将诸多功能,进行组合。也可以组合其他模块。这里AppModule 的模块装饰器是一个根模块,相当于App.vue。

image.png
而其他模块又是组合自己模块的控制器, 提供者

image.png

imports: 所有模块集合

controllers: 所有路由集合 (当然也可以在controllers写业务逻辑,但是还是提倡业务逻辑分离)

providers: 所有业务逻辑集合

控制器装饰器

当然你也可以理解成路由匹配装饰器

@Controller(path?): 定义一个控制器类,可以接收一个可选的路径参数

image.png

image.png

image.png

请求装饰器

@Get 中的请求装饰器

@Param 是取路径中的参数,比如 /1 种的 1

image.png
@Query 是取 url 后的 ?isShow=true

image.png

tip: 在 @Param(‘id’) 或者 @Query(‘isShow’) 中写相关的字段,相当于一种解构,我具体要解析的字段。不然会返回一个对象

image.png

Post 中的请求装饰器

通过 @Body 取到 body 部分,我们一般用 dto 的 class 来接受请求体里的参数(就是把请求参数也做作为一个类导出)

image.png

其余请求装饰器

更新:@Patch(‘:id’)

删除 @Delete(‘:id’)

image.png

请求体装饰器(Request body decorators)

这个大家也挺常见,比如服务端经常会让你截图,看看你的请求参数,请求地址,做文件上传,还会让你看看你的content-type,是不是符合要求的,而这些数据,都是可以通过@Request 装饰器获取到

image.png

请求装饰器小总结

其实对于什么方式的装饰器,我们直接用就行,比如@Get, @Post,@Patch, @Delete 关键是对参数的解析

比如是 @Get(‘:id’)

要用 @Param 是取路径中的参数,比如 /xxx/1 种的 1

@Query 是取 url 后的 ?isShow=true

如果是post 类型的body ,要用 @Body 取到 body 部分。而我们一般用 dto 的 class 来接受请求体里的参数

响应体装饰器

服务端以怎样的数据格式返回数据给前端用,包括code,message, data 等

image.png

状态码装饰器

可以规定返回的状态码,当然也可以直接在响应体装饰器上设置(status(xxx))

image.png

总结

这一篇,整体来说比较枯燥,还有很多装饰器没有聊,只是把客户端发请求,服务端对路径/参数做解析,返回数据到客户端的装饰器 做了一些介绍

image.png

其他装饰器大致也是一样的道理,后面遇到我们再做说明

Nest 系列 往期文章

1. 《Nest系列 - 1. 🔥运行一个Nest项目以及整体目录学习》

2. 《Nest系列 - 2. 🔥Nest 代码生成器,让你告别base代码书写!!!》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/34366.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

物联网 IoT 收录

物联网IoT日常知识收录 thingsboard, nodered是国际大品牌, iotgateway是国内的, 几个scada, pyscada, json-scada都还不错,比较一下。thingsboard-gateway是python系的,如果你愿意,可以用这个作为公司的物联网网关。…

深入探索Jetpack数据绑定(DataBinding)

Jetpack的数据绑定(DataBinding)库为我们提供了一个强大而灵活的工具,用于将UI组件与数据源绑定在一起。本文将深入探讨数据绑定的高级用法,包括双向绑定、自定义Binding Adapter、使用LiveData和ViewModel,以及如何处…

热虹吸管的传热计算

热对称管和热管通过使用中空管内的两相流体,在特定的距离上传输大量的热量。 更广泛使用的热管使用吸芯结构将液体输送回热端,而热虹吸管是一个简单的空心管,使用重力。 由于缺乏吸芯结构,使得热虹吸管比传统的热管便宜得多。 然…

如何确保 Puppet 配置在复杂网络环境中的可靠分发和同步?

在复杂网络环境中确保 Puppet 配置的可靠分发和同步可以采取以下措施: 网络拓扑规划:在复杂网络环境中,首先需要进行网络拓扑规划,确保网络结构合理,并能够支持可靠的分发和同步机制。 Puppet Master 多节点部署&…

跟《经济学人》学英文:2024年6月22日这期 Think Nvidia looks dear?

Think Nvidia looks dear? American shares could get pricier still Investors are willing to follow whichever narrative paints the rosiest picture 觉得Nvidia看起来很贵?美国股票可能会变得更贵 投资者愿意追随任何一个描绘出最乐观的故事 dear&#x…

LeetCode 274 H指数

1.题图要求: 给你一个整数数组 citations ,其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数。根据维基百科上 h 指数的定义:h 代表“高引用次数” ,一名科研人员的 h 指数 是指他(她&#…

虚幻引擎 Gerstner Waves -GPU Gems 从物理模型中实现有效的水体模拟

这篇文章重点在于结合GPU Gems一书中有关Gerstner Waves 的数学公式,在虚幻引擎中复现正确的Gerstner Waves和正确的法线 文中内容整理自书中,并附带我的理解,与在虚幻引擎中的实现,可以参考原文看这篇文章,原文网上很…

Redis队列自研组件

背景 年初的时候设计实践过一个课题:SpringBootRedis实现不重复消费的队列,并用它开发了一个年夜饭下单和制作的服务。不知道大家还有没有印象。完成这个课题后,我兴致勃勃的把它运用到了项目里面,可谁曾想,运行不久后…

如何实现PHP开启OPcache?

一、OPcache是什么? 官方介绍:OPcache 通过将 PHP 脚本预编译的字节码存储到共享内存中来提升 PHP 的性能, 存储预编译字节码的好处就是 省去了每次加载和解析 PHP 脚本的开销。 是不是有点看不明白? 给人一种朴实无华一点都不重点介绍的感觉? 其实说简单点就是这种缓…

靠AI一年增长15%,商场的春天来了么

文|艺 思 编|王一粟 “在商场全面部署AI机器人仅1年,AI带来的销售占同期整体联营销售额的比重逐步增加,最高达到了15%。” 这是正在银泰百货发生的真实案例。 除了线上电商,百货商场等线下的实体零售也正在尝试…

汇聚荣电商实力好不好?

在数字化浪潮的推动下,电商平台如雨后春笋般涌现,而“汇聚荣”作为其中的一员,其综合实力自然成为业界与消费者关注的焦点。那么,汇聚荣电商的实力究竟如何呢?接下来,我们将从多个维度深入探讨这一问题。 一、品牌影响…

创建和探索VGG16模型

PyTorch在torchvision库中提供了一组训练好的模型。这些模型大多数接受一个称为 pretrained 的参数,当这个参数为True 时,它会下载为ImageNet 分类问题调整好的权重。让我们看一下创建 VGG16模型的代码片段: from torchvision import models…

【JavaScript脚本宇宙】加速您的网站:图像优化工具和库的终极指南

别让大图拖垮你的应用:如何正确优化图像 前言 在数字时代,图像是我们日常生活中不可或缺的一部分。然而,随着图像数量的增加和分辨率的提高,它们也占据了越来越多的存储空间和带宽。为了解决这个问题,开发人员可以使…

什么美业系统好用?美业门店收银系统源码分享、小程序展示

专业美业系统与普通系统相比,更加贴合美业门店的经营需求,提供了更全面、便捷、高效的管理功能,有助于提升门店的服务质量和经营效益。 博弈美业系统包括PC、iPad、手机、小程序四大端口,满足不同人群的各种需求。客户可从小程序…

python并行批量存储mat文件

输入:包含数组的列表arrays_list,以及包含每个数组存储位置的列表save_path_list from concurrent.futures import ThreadPoolExecutor, as_completed from tqdm import tqdm from scipy.io import * def save_array_to_mat(array, filepath):savemat(f…

有什么能和ai聊天的软件?5个软件教你快速和ai进行聊天

有什么能和ai聊天的软件?5个软件教你快速和ai进行聊天 当今数字化时代,人工智能(AI)技术已经逐渐渗透到我们的日常生活中,而与AI进行聊天也成为了一种趋势和乐趣。以下是五款可以和AI进行聊天的软件,它们提…

如何提高台式扫描电镜的放大倍数

台式扫描电镜(SEM)因其紧凑的设计和高效的成像能力,在材料科学、生物学和纳米技术等领域中扮演着重要角色。然而,用户在使用过程中可能会遇到需要更高放大倍数以获得更细微结构图像的情况。以下是一些提高台式扫描电镜放大倍数的策…

大厂面试官问我:Redis持久化RDB有没有可能阻塞?阻塞点在哪里?【后端八股文三:Redis持久化八股文合集】

往期内容: 大厂面试官问我:Redis处理点赞,如果瞬时涌入大量用户点赞(千万级),应当如何进行处理?【后端八股文一:Redis点赞八股文合集】-CSDN博客 大厂面试官问我:布隆过滤…

与其他自动化配置管理工具(如 Ansible 、Chef )相比,Puppet 的独特优势和局限性分别是什么?

Puppet的独特优势包括: 基于声明式语言:Puppet使用自己的声明式语言(Puppet DSL)来描述系统配置,使得配置更加简洁、易于理解和维护。 完善的资源模型:Puppet具有丰富的资源模型,可以管理各种不…

C++ 入门

前言 c的发展史: C的起源可以追溯到1979年,当时Bjarne Stroustrup在贝尔实验室开始开发一种名为“C with Classes”的语言。以下是C发展的几个关键阶段: 1979年:Bjarne Stroustrup在贝尔实验室开始开发“C with Classes”。1983…