node

Koa

February 19, 2023
node

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. ...

Node.js

February 17, 2023
node

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. ...

Nest.js

September 20, 2022
node

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 ...

npm

July 17, 2022
node

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 的代码,造成故障 我本地都是好的,测试也测过,怎么发上去就挂了? 出问题了,责任算谁的? 锁 不能及时跟进安全修复,时间久了就是技术债,怎么升也升不动了 锁不锁依赖 ↩︎ ...