TypeScript 实现 @required 参数装饰器
参数装饰器作用 可以借助参数装饰器,提前记录参数的某些信息。 实现思路 首先,参数装饰器单独声明是没用的。需要在其定义中,设定某个参数的要求(元信息metadata),例如此参数不能为空、必须为某个类型。 然后借助函数装饰器改写函数运行逻辑,这里可以根据参数装饰器保存的对参数的要求,在函数运行前一个个校验。 总结来说,参数装饰器记录参数元信息,函数装饰器读取元信息并且进行校验。 ...
参数装饰器作用 可以借助参数装饰器,提前记录参数的某些信息。 实现思路 首先,参数装饰器单独声明是没用的。需要在其定义中,设定某个参数的要求(元信息metadata),例如此参数不能为空、必须为某个类型。 然后借助函数装饰器改写函数运行逻辑,这里可以根据参数装饰器保存的对参数的要求,在函数运行前一个个校验。 总结来说,参数装饰器记录参数元信息,函数装饰器读取元信息并且进行校验。 ...
环境配置 TypeScript配置: // tsconfig.json { "compilerOptions": { "target": "ESNext", // 支持装饰器语法 "experimentalDecorators": true, // 支持元数据 "emitDecoratorMetadata": tru...
应用场景 异步处理:将同步变成异步,提高主流程相应速度 系统解耦:各个系统通过 MQ 进行通信 数据同步:MQ 可以保证数据修改的有序性 流量削峰:系统瓶颈通常在 DB 上,可以考虑将数据写入 MQ 和 Cache,等流量过去,Worker 将数据刷到 DB 中 常见队列类型 缓冲队列:实现批量处理、异步处理和平滑处理。例如写日志,不用每次都写入磁盘,可以 10 次...
集中管理降级开关 通过推送/拉取机制,将开关同步到各个应用(比如 1 次/s)。 这种需要借助「配置中心」。 读降级 不调用 api,只读本地/分布式缓存,没有数据返回默认数据。 这种需要借助LRU Cache、Redis Cache。 写降级 写场景大多数不能降级。一般解决方法是将同步改成异步,并且将数据写入到 redis,redis 可以给读请求提供数据;由异步任务定时将数...
为什么需要超时重试? 如果不设置超时,则会导致请求响应满,积累导致应用雪崩。 对于重试来说,是否重试、重试次数以及超时时间,都很重要: 是否重试:读请求适合重试,写请求不适合 重试次数:一般是 1 次,多了就相当于是 DDos 超时时间:内网一般是 2s nodejs 相关开发经验 在开发 nodejs 服务的时候,经常需要对数据库的 js 库、redis的js库,...
静态资源版本回滚 前端经常面临这个问题。在前后端分离的趋势下,前端通常将项目打包,并且将文件放到 CDN 上。 一般来说,静态资源的发布都是“存量发布”。比如腾讯云控制台,是通过 hash 值来控制版本,每次发版时,都是不会改动之前的版本的文件。 当有问题出现,可以快速加载原版本文件,来进行回滚。同时,hash 值保证了每次版本的文件名不一样,防止覆盖。 部署版本回滚 1、小版本:...
隔离的作用 隔离是指将系统或资源分割开,是为了在系统发生故障时,能限定传播范围和影响范围,即发生故障后不会出现滚雪球效应,从而保证只有出问题的服务不可用,其他服务还是可用的。 常见隔离手段 1、进程/线程隔离:nodejs 没有多线程,所以考虑进程隔离。可以通过 pm2(进程管理器)来启动多个进程,从而提高可用性。 2、服务分组+集群隔离:某个服务单独部署集群,防止故障相互影响。某个...
TypeScript 高级数据类型 Dictionary 和 NumericDictionary Dictionary:一个对象,键是 string 类型。 NumericDictionary:一个对象,键是 number 类型。 注意:要手动实现下,通过「索引签名」+「范型」。 定义: interface Dictionary<T = any> { [ind...
什么是 Mixin 模式? 在 OOP 中,Mixin 是一个类。包含其他类的方法,并且不是通过继承的方式来实现的。 我一般理解成“混合”,在 js 中,其实就是Object.assign(obj1, obj2),将 obj2 原型上的方法引用复制到 obj1 的原型的同名方法中。 策略模式优缺点 避免了继承,方法的扩展是松耦合的,支持多个对象的方法进行“混合”。 代码实现 //...
元编程 定义 狭义来说,应该是指「编写能改变语言语法特性或者运行时特性的程序」。换言之,一种语言本来做不到的事情,通过你编程来修改它,使得它可以做到了,这就是元编程。 在 ES6 中的体现 从这个角度来看,Proxy、Reflect是js的元编程。并且装饰器中,为类方法的参数设置要求(类型、是否必须)等都是元编程,因为js本身或者ts本身(只能声明类型、不能校验或者转化)都做不到,通...