一、前置知识:reflect-metadata

前边我们做过了nestjs学习日记,其实只是简单说了一些nestjs的用法,并没有深入,这一次,我们从另一个角度来学习一下nestjs。但是在此之前,我们需要快速补充一些前置知识:

装饰器

装饰器是一种特殊的声明,可以附加到类、方法、访问符、属性上,可以修改行为,主要以下几种:

  • 类装饰器
  • 方法装饰器
  • 访问器装饰器
  • 属性装饰器
  • 参数装饰器

Nestjs中,基本都是使用装饰器工厂来实现的,比如@Controller(), @Get()

当然,关于装饰器的内容,我们在此不展开,可以自行了解。

reflect-metadata

reflect-metadata是一个用于TSECMA的元数据反射库提案

它通过提供对元数据定义和检查的支持,简化了装饰器的使用

可以在类、方法、参数、属性上设置和获取元数据

现在reflect-metadata算是一个polifill,可以通过npm i reflect-metadata来使用

reflect-metadata提供了一组用于定义和检索元数据的方法:

  • Reflect.defineMetadata(metadataKey, metadataValue, target[, propertyKey]):给目标对象[或目标对象的指定属性]定义元数据

  • Reflect.hasMetadata(metadataKey, target[, propertyKey]):检查目标对象[或目标对象的指定属性]是否具有指定的元数据

  • Reflect.getMetadata(metadataKey, target[, propertyKey]): 获取目标对象[或目标对象的指定属性]的元数据

  • Reflect.getOwnMetadata(metadataKey, target[, propertyKey]): 获取目标对象[或目标对象的指定属性]的自有元数据

  • Reflect.deleteMetadata(metadataKey, target[, propertyKey]): 删除目标对象[或目标对象的指定属性]的元数据

nestjs中,其实就是通过装饰器和元数据来实现的各种功能。

作者

胡兆磊

发布于

2024-09-05

更新于

2025-04-15

许可协议