william.chan's blog

done is better than perfect

nestjs Metadata & Reflector

Nest 的实现原理是通过装饰器给 class 或对象添加元数据,然后,初始化的时候取出这些元数据,进行依赖分析,创建对应的实例对象

nest 实现的核心是 Relfect.metadata 的 api 疑问:只是通过装饰器声明了一下,启动nest应用,这时候对象就给创建好了,依赖也给注入了,这是怎么实现的呢? “design:type” “design:paramtypes” “design:returntype” 通过 Refelct.metadata 获取类和对象的元数据 疑...

nestjs 自定义装饰器

Nest 内置了很多装饰器,大多数功能都是通过装饰器来使用

什么时候需要使用自定义装饰器 1.当nest内置装饰器不能满足需求的时候 2.当装饰器比较多,需要把多个装饰器合并成一个的时候 SetMetadata, @SetMetadata:用于给路由打上“元数据”标签。不同的 metadata 有不同的业务场景。 场景举例 1:角色权限控制。有些接口只需登录,有些接口需要 admin 角色。可以用 @SetMetad...

nestjs session & cookie

在 Web 开发中,理解 HTTP 的无状态特性是掌握身份认证的前提。为了让服务器认识“你是谁”,Session 和 Cookie 这对经典的组合应运而生。

我们可以通过一个完整的业务链路,将工作原理、浏览器行为、NestJS 代码实现以及服务端存储方案串联起来,形成一个全局的认知。 1. 核心模型:银行账户与银行卡 HTTP 协议本身是没有记忆的。为了维持状态: Session(会话) 就像你在银行开通的账户,你的余额、信用等级都安全地保存在银行的内网系统(服务器端)里。 Cookie(饼干) 就像银行发给你的银行卡。卡上不...

nestjs 核心装饰器有哪些

NestJS 深度依赖 TypeScript 装饰器(Decorators)来实现依赖注入、路由分发和面向切面编程(AOP)。

NestJS 广泛使用了装饰器(Decorators)来定义和组织代码。以下是 NestJS 中最核心和最常用的一些装饰器,按照它们的功能进行分类: 1. 模块与提供者 (Modules & Providers) @Module(): 用于类,将其标记为 Nest 模块。接收一个对象,包含 imports(导入其他模块)、controllers(当前模块下的控制器)、pro...

AOP 架构

AOP的好处是可以把一些通用逻辑分离到切面中,保持业务逻辑的纯粹性,这样切面逻辑就可以复用,还可以动态增删

MVC 架构 在 MVC 架构下,请求会先发送给 controller,由 controller 调度 model 层的 service 来完成 业务逻辑,然后,返回对应的 view。 在这个流程中,nest 还提供了 AOP(Aspect Oriented Programming)的能力,也就是面向切面编程的能力。 后端框架基本都是 AOP 架构 QA: ruby ...

Nest 全局模块和生命周期

避免重复 imports。支持在创建和销毁时执行一些逻辑。

全局模块 module 导出 provider,另一个 module 需要 imports 它才能用这些 provider。 如果这个模块被很多模块依赖,那每次都要 imports 就很麻烦。 能不能设置成全局的,它导出的 provider 直接可用呢? 1.常用引入模块方式 在 AaaModule 里指定 exports 的 provider 然后,在 BbbModule ...

Nest providers 4种类别

使用多种 provider,灵活注入对象

providers Nest 实现了 IoC 容器,会从入口模块开始扫描,分析 Module 之间的引用关系,对象之间的依赖关系, 自动把 provider 注入到目标对象 什么是provider 被 @Injectable() 修饰的 class 在 @Module() 的 providers 中声明 示例 AppService 1.useClass 上面...

Nest项目断点调试

查看代码整个执行路线 - 作用域,调用栈 - 通过单步执行查看变量变化

在 VSCode 里边写代码边调试 最方便调试 nest 项目的方式 VSCode 实现了 Debugger 客户端 创建 .vscode/launch.json 文件 然后,输入node快速创建一个 node 调试配置 stopOnEntry 是在首行断住,和 –inspect-brk 一样的效果。 调试过程中修改了代码,点击重新调试,可以马上看到改动之...

IoC 解决了什么问题?

IoC 使开发者免去手动创建和组装对象的麻烦,改成声明依赖,让工具自动创建组装对象

nestjs 中有很多对象 Controller 对象,接收 http 请求,调用 service,返回响应 Service 对象,实现业务逻辑 Repository 对象,实现对数据库的增删改查 数据库连接对象 DataSource 配置对象 Config 对象间关系复杂 Controller 依赖 Service 实现业务逻辑 Service 依赖...

5种 HTTP 数据传输方式

给接口传递参数的5种方式

url param - 路径中参数 将参数写在 url 中 1 2 3 4 /users/:id # /users/1 query string 通过 url 中 ?,后面的用 & 分隔的字符串传递数据 1 2 3 /users?name=cwy007&age=34 query-string form-urlencoded 直接用 form 表单提...