装饰器

因为Nest大量使用装饰器,所以复习一下装饰器

装饰器是一种特殊的类型声明,能够附加到类型,方法,属性或者参数上,可以修改类的行为。

通俗的讲,装饰器就是一个方法,可以注入到类,方法,属性参数上来扩展类,属性,方法的功能。

也可以理解为其装饰器的对象和一些参数作为形参传入装饰器,再在装饰器中去修改对象的行为,以此达到增强对象的作用。

常见的装饰器有:类,属性,方法,参数装饰器

普通装饰器(无法传参) 装饰器工厂(可传参)

1 类装饰器

类装饰器应用于类的构造函数,可以用来监视,修改,和替换类定义。


这个params就是类A本身,
所以可以i在装饰器中拿到类并且扩展器属性,方法


可以看到动态扩展属性方法已经成功了。
这是普通装饰器,无法传参

装饰器工厂(可传参)

只要在普通装饰器的基础上return一个函数即可变成装饰器工厂

此时的params变成了传进来的值,而return的函数的参数target就变成了类A



类装饰器会在运行时被当作函数调用,而类的构造函数作为唯一的参数,如果类装饰器返回一个值,他会使用返回的来替换类的声明。


那如果

不改b,只改getData

可以看到b还是1111,其实也有点像继承,子类的值覆盖父类的值一样
相当于返回一个新类,这个类是继承了父类。
总结:类装饰器一般是一个函数,分为装饰器工厂和普通装饰器,主要是原理就是类的构造函数会通过参数传入该装饰器(函数),在该函数上对类做一系列的扩展,加强该类。

属性装饰器

我们直接使用装饰器工厂,这个返回的函数的参数除了类的原型对象!!!!还有一个属性的名字。

所以可以直接在原型对象上进行操作



修改成功。
总结:属性装饰器接受两个参数,第一个是类的原型对象!!!!第二个是属性名字。通过拿到原型对象去加强该属性。而类装饰器拿到的参数是类的构造函数,不是原型对象

方法装饰器

方法装饰器会被应用到方法的属性描述符上,可以用来监视,修改或者替换方法定义。
方法装饰器接受三个参数
第一个:对于静态方法来说是类的构造函数。对于实例方法则是类的原型
2:方法名
3: 成员的属性描述符。
如图


可以看到静态成员拿到的是构造函数,实例成员拿到的是类的原型对象。
修改该成员:将传入的值统统改为string类型。



可以看到已经替换掉了。
还可以修改:


所以可以通过方法装饰器去加强或者修改方法。

方法参数装饰器

顾名思义就是作用于方法上的形参上。
可以使用参数装饰器为类的原型增加一个数据,也可以加强和修改对应的形参。传入下列三个参数:
1 跟方法装饰器一样,静态传构造,实例传原型。
2 参数的名字
3 参数在方法中的索引(第几位)


总结: 装饰器(一般是函数)通俗的就是用来加强其修饰的对象,其修饰的对象通过参数传入其中,再在装饰器中执行一系列操作,扩展对象的功能等等。

执行顺序

要注意一些形参比如target,name就算不传也必须写,不然会报错


可以看到,2341,即属性装饰器-方法装饰器-方法参数装饰器-类装饰器这种执行顺序。
,对于不同装饰器如图:


对于同的装饰器,全都是21, 21,21,即其执行顺序是从下网上,从后往前,从右往左执行的。

控制器

nest的控制器本质就是一个通过装饰器Controller装饰过的类。使用的时候只需要在模块中进行注册配置即可使用
nest的控制器是用来处理请求返回数据的

,如

通过@Controller来装饰,表明这是一个控制器,里面的属性通过@Get或者@Post表明路由方法,而名字像getHello这些其实可以随便写。

已经匹配到我们的test路由了。

创建一个控制器

首先安装
npm i -g @nestjs/cli
然后输入nest --help

这些都是可以创建的,
创建路由
nest g controller cats

会自动注入

然后就可以编写代码了/

post请求


参数的处理


这些是方法参数装饰器
如何使用呢?

req是一个参数,而@Request是参数装饰器,用来加强该参数,这样的话,req就是一个类似于express的req了。


还有几个较为常用的,如@Body, @Params, @Query等等,他们分别对应req.body, req.params, req.query,还接受具体key值来使用,如



传key

其他的@Body @Params也是类似这样使用,

@params 动态路由


在装饰器上加参数表示路劲名字


可以看到打印出来了

nest学习(2) js装饰器+nest控制器相关推荐

  1. [转载] Python学习笔记——用装饰器decorator和Memoization记忆化提高效率,原理讲清楚了

    参考链接: 在Python中使用装饰器进行记忆 Python学习笔记--用装饰器decorator和Memoization记忆化提高效率 装饰器Memoization记忆化运用`functools`中 ...

  2. 零基础学习设计模式之装饰器模式(配套视频)

    零基础学习设计模式之装饰器模式 定义 在不改变目标结构的情况下,动态的给对象增加功能 举例 如房子装修.相片加相框等,都是装饰器模式. 基本组件 抽象构件(Component)角色:定义一个抽象接口以 ...

  3. python学习笔记(装饰器、迭代器生成器、内置函数、软件目录开发规范)

    装饰器 定义:本质是函数,(功能:装饰其他函数):就是为其他函数添加附加功能 模拟场景一,在现有的函数中增加某个功能.现有的做法是定义新函数,并且加入函数中.需要修改源代码. def logger() ...

  4. Python小白学习之函数装饰器

    装饰器 2018-10-25 13:49:37 装饰器从字面意思就是用来装饰的,在函数可以理解为:在函数中,我们不想影响原来的函数功能,又想给函数添加新的功能,这时候我们就用到了装饰器. 一般函数操作 ...

  5. Python学习笔记:装饰器

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  6. JS 装饰器(Decorator)场景实战

    本文不会大篇幅介绍装饰器(Decorator)的概念和基础用法,核心介绍我们团队如何将装饰器应用于实际开发,和一些高级用法的实现. 装饰器简介 Decorator 是 ES7 的一个新语法,正如其&q ...

  7. 理解 JS 装饰器:@Decorator

    Javascript 里的装饰器目前还处于 stage-2 阶段,借助 TypeScript 或者 Babel,已经有大量的优秀开源项目深度用上它了,比如:VS Code: 理解装饰器有助于帮助我们更 ...

  8. Python学习之路-装饰器生成器正则表达式

    装饰器 通俗的讲,装饰器就是在不改变源代码基础上,给源代码增加新功能. 不改变函数的源代码.调用方式.返回值等,给函数增加新功能. 经典案例:登录装饰器, def login_decorator(fu ...

  9. Python学习之路--装饰器

    三元运算 变量 = 条件返回True的结果 if 条件 else 条件返回False ,用于简单 import time time.time() 1970年至今多少秒 time.sleep()暂时休眠 ...

最新文章

  1. 安装第三方包查看python版本/第三方包版本
  2. 计算机组成原理 — CPU — 缓存访问
  3. Hard commits, soft commits and transaction logs
  4. matlab中的级数怎默算_matlab级数求和代码
  5. 第六次实训作业异常处理
  6. 利用 Azure Functions 实现无服务器体系结构
  7. 阿里云神龙团队拿下TPCx-BB排名第一的背后技术
  8. python游戏源码回合制游戏_Python回合制小游戏对战程序
  9. 安装和使用华三HCL模拟器的常见问题总结
  10. python和前端哪个好_web前端和python学哪个出来工资高?
  11. 五险一金 ,即将毕业的每个人都看看吧
  12. 107 THREE.JS 使用StereoEffect实现模拟VR双屏
  13. 网络安全如何做?提防黑客来“敲门”
  14. Moment js获取今日、昨天、这周、上周、本月、上月方法
  15. 拓展自定义编辑器窗口(EditorGUILayout类)
  16. 服务器宕机原因有哪些?服务器宕机解决方案
  17. 采购标准订单/标准收货 AI U9配置
  18. 欢度国庆!今天,我们为祖国母亲庆生......
  19. Java并发编程——this引用逸出(this Escape)
  20. R语言学习:用ggplot2画折线图

热门文章

  1. 解决@Valid校验List失败问题
  2. CTF中遇到不知道文件类型_螺栓的常见问题,不知道你遇到过没有
  3. 现行高考政策公平 辩论_高考统一命题是否有利于教育公平 辩论稿
  4. C++int转字符串---sprintf函数
  5. ADAMS使用过程中的license不可用导致软件不能打开问题的解决
  6. 【分享】我们结婚吧——十二星座求爱大全
  7. hexo上传网页无法显示图片的有效解决方法
  8. 什么是计算,什么可以计算?
  9. html5 小游戏编写,HTML5编写的小游戏
  10. 含文档+PPT+源码等]精品基于NET实现的家电维修保养信息系统[包运行成功]计算机毕业设计NET毕设项目源码