February 19, 2023
API # Request # Koa Request 是 Node 原始 request 对象的抽象,提供额外的功能用于 http 服务的开发
api 有:
request.method request.query … Response # Koa Response 是 Node 原始 response 对象的抽象,提供额外的功能用于 http 服务的开发
api 有:
response.header response.headers response.get() … Context # 封装 node 的 request 和 response 对象到一个对象中,提供额外的辅助方法便于应用开发
每个 http 请求都会创建一个 context 对象
app.use(async ctx => { ctx; // is the Context ctx.request; // is a Koa Request ctx.
...
February 17, 2023
Concepts1 # JS 引擎
解析和执行 JS 代码,如 v8
JS 运行时
JS 运行时可以理解为 JS 本身 + 一些拓展的能力所组成的一个运行环境
Libuv
跨平台的异步 IO 库
它主要是封装各个操作系统的一些 API,提供网络还有文件进程这些功能
Node 架构 # 单线程 + 事件驱动 + 非阻塞 IO
如下图
事件驱动
事件驱动是操作系统提供的订阅发布机制,由操作系统的 IO 多路复用模块实现,不同的操作系统中提供的 API 不一样,比如 Linux 的 epoll、MacOs 的 kqueue、windows 的 IOCP
当 Node.js 中没有任务处理时,它就会阻塞在这里,有事件发生后,就会被唤醒继续执行
Event Loop # Node.js 的任务分为宏任务和微任务,宏任务包括定时器、网络 IO、文件 IO,微任务包括 Promise、process.
...
September 20, 2022
Providers # 提供者,生产者,由 @Injectable() 装饰的类即为 provider
注册 # 在 @Module 里注册,由 Nest IOC runtime 去解析并做依赖注入 (DI)
Services # 可做为 provider,实现并提供具体的功能
Controller # 消费者,使用 provider 提供的 service
处理 client 的请求,并返回响应
DTO # Data transfer object
定义数据传输的结构,通过 class 去定义
Module # 由 @Module 装饰的类,nest 利用 @Module 提供的元数据组织应用结构
封装 providers,不属于当前 module 或 imports 里的 provider 无法被实例化
module 不可作为 provider,(避免循环依赖)
imports # 导出 provider 给当前 module 使用的 module
...
July 17, 2022
Peer dependency # 对等依赖,通常用来表示插件和宿主包之间的依赖关系
对宿主包比较宽松的版本限制
对宿主包没有显式依赖关系,即没有直接的 require 或 import
冲突时会 warning,不会同时安装两个副本
由使用方决定安装什么版本
比如 react 组件,声明 react 为 peerDependency 及版本范围即可,因为使用你组件的项目肯定是个 react 项目,已经安装了 react
如果继续声明 react 为 dependency, 当跟宿主环境不一致时,同时存在两个 react 版本,会带来额外的冲突风险
Dependency # 运行时依赖,冲突时,会安装不同的版本
Dev dependency # 开发依赖,不会打到最终的包里
依赖管理 # 锁不锁版本1 # 理想的 semver 是 break.feat.bugfix,现实的 semver 是 break.break.break
不锁根据 semver 自动升级,可能被投毒或引入有 bug 的代码,造成故障
我本地都是好的,测试也测过,怎么发上去就挂了?
出问题了,责任算谁的?
锁
不能及时跟进安全修复,时间久了就是技术债,怎么升也升不动了
锁不锁依赖 ↩︎
...