服务端2月17日 19:02
TypeORM事务处理:三种API、隔离级别、悲观锁乐观锁和分布式SagaTypeORM 提供三种写事务的方式:`@Transaction` 装饰器(0.3.x 已移除)、`EntityManager.transaction`、和 `QueryRunner`。选哪种取决于你的场景——简单事务用 `EntityManager.transaction`,需要精细控制用 `QueryRunner`。这篇文章把三种方式、隔离级别、锁机制都讲清楚,以及分布式事务的替代方案。
## 三种事务 API
### 方式一:EntityManager.transaction(推荐日常使用)
最常用的事务写法——传一个回调函数,回调里所有操作在同一个事务里:
```type...服务端2月17日 19:56
TypeORM QueryBuilder高级查询:条件组合、子查询、分页和批量操作`find()` 和 `findBy()` 只能处理简单查询——多表关联、条件组合、子查询、聚合分组,都得用 QueryBuilder。但 QueryBuilder 的 API 设计有时让人困惑:`leftJoin` 和 `innerJoin` 有什么区别?`where` 和 `andWhere` 能不能混用?子查询怎么写?这篇文章用实际场景把 QueryBuilder 的高级用法讲清楚。
## QueryBuilder 基础回顾
```typescript
// 简单查询:find() 能搞定的
const users = await userRepository.find({
...服务端2月17日 19:57
TypeORM多数据库支持:配置差异、MongoDB限制和多数据源方案TypeORM 的卖点之一是"一套代码跑在多种数据库上"。实际体验下来,SQL 数据库之间迁移确实顺畅,但 MongoDB 是另一回事——文档模型和关系模型的 API 差异很大。这篇文章聚焦实际项目中的数据库选择、配置、以及多数据源场景。
## 支持的数据库一览
TypeORM 支持的数据库分两类:
**SQL 数据库**(API 统一,切换成本低):
- MySQL / MariaDB
- PostgreSQL
- SQLite
- SQL Server
- Oracle
- CockroachDB
- SAP Hana
**文档数据库**(API 有差异):
- MongoD...服务端2月17日 19:59
TypeORM实体继承:单表、类表和具体表继承的选择与实现TypeORM 支持三种实体继承模式,名字听着抽象,但对应的是数据库设计里真实的问题:不同类型的数据,是放一张表还是分多张表?放一张表会有大量 NULL 列,分多张表 JOIN 查询变慢。这篇文章把三种模式的实现方式、优缺点、以及什么时候选哪种,都讲清楚。
## 三种模式对比
| 模式 | 表结构 | 查询性能 | NULL 列 | 适用场景 |
|------|--------|----------|---------|----------|
| 单表继承(STI) | 一张表,鉴别列区分类型 | 最好(无 JOIN) | 多 | 子类字段差异小 |
| 类表继承(CTI) | 父...服务端2月17日 20:01
TypeORM测试:Mock Repository、SQLite内存数据库和NestJS集成TypeORM 的测试分两层:不依赖数据库的纯逻辑测试(单元测试),和需要真实数据库交互的测试(集成测试)。很多人所有测试都连数据库,跑得又慢又不稳定;也有人不连数据库,Mock 了一大堆,测完发现线上还是出 bug。这篇文章把两种策略的使用场景和实现方式都讲清楚。
## 测试环境:SQLite 内存数据库
集成测试需要真实数据库,但不需要用 MySQL/PostgreSQL——SQLite 内存数据库够用,速度快 10 倍以上,每个测试文件启动不到 100ms:
```typescript
import { DataSource } from 'typeorm';
import ...服务端2月17日 20:10
npm audit工作原理:漏洞评估、overrides修复和CI集成`npm audit` 一跑一片红,但很多漏洞其实不影响你的项目——间接依赖里的原型链污染,你的代码根本不走那条路径。这篇文章讲清楚 npm audit 的工作原理、怎么判断漏洞是否真的有风险、以及修复和忽略的策略。
## npm audit 的工作原理
npm audit 的工作流程:
1. 把你项目的依赖树(包括间接依赖)发送到 npm 的审计服务 `https://registry.npmjs.org/-/npm/v1/security/advisories/bulk`
2. 审计服务把每个包的名称和版本和已知漏洞数据库比对
3. 返回匹配到的漏洞列表,按严重级别分类
这就...服务端2月17日 20:21
npm在CI/CD中的最佳实践:缓存策略、npm ci和安全审计本地 `npm install` 跑得好好的,推到 CI 就各种失败——超时、依赖不一致、缓存不命中、构建产物丢失。这篇文章把 npm 在 CI/CD 里的常见坑和最佳实践都过一遍,以 GitHub Actions 为主,其他 CI 工具的思路一样。
## npm ci vs npm install:CI 里永远用 ci
```bash
# ❌ 错误:CI 里用 npm install
npm install
# ✅ 正确:CI 里用 npm ci
npm ci
```
两者区别:
| | npm install | npm ci |
|---|---|---|
| 依赖来源 ...服务端2月17日 20:22
npm workspaces monorepo:构建顺序、TypeScript配置和CI实践npm workspaces 是 npm 7+ 内置的 monorepo 方案——不需要安装额外工具,在 package.json 里声明 `workspaces` 就能用。但"能用"和"好用"之间有不少坑:workspace 间的依赖引用、构建顺序、TypeScript 配置、CI 下的缓存策略,这些才是实际项目里反复踩的。这篇文章把从搭建到上线的完整流程走一遍。
## 基本配置
### 目录结构
```
my-monorepo/
├── package.json # 根配置,声明 workspaces
├── package-lock.json # 统...服务端2月17日 20:24
npm、pnpm和Bun怎么选?依赖隔离、安装速度和迁移成本对比选包管理工具不是比谁安装快——安装只在 `npm install` 那一瞬间,但依赖结构、磁盘占用、monorepo 支持、CI 表现才是日常影响效率的因素。这篇文章不列参数表,而是从实际场景出发:你的项目该用哪个,什么时候该迁移。
## 三者的核心差异
| | npm | pnpm | Bun |
|---|---|---|---|
| 依赖存储 | 每个项目独立安装 | 全局存储 + 硬链接 | 每个项目独立安装 |
| node_modules 结构 | 扁平化(包可访问未声明的依赖) | 嵌套 + 符号链接(严格隔离) | 扁平化 |
| monorepo 支持 | npm ...服务端2月17日 20:26
npm报错怎么排查?ERESOLVE、E404、EACCES等常见错误修复`npm install` 报错,跑一次修一次,下次换个项目又遇到——这篇文章按错误类型分类,每种错误给诊断思路和解决方案,不再靠运气修 bug。
## 第一步:看清错误信息
npm 的错误信息有时候一大坨,但关键信息只在一两行。先找到 `npm ERR!` 开头的行,重点关注:
- `code` — 错误码,如 `ERESOLVE`、`E404`、`EACCES`、`ENOENT`
- `path` — 出错的文件或目录路径
- `syscall` — 系统调用,如 `open`、`access`、`mkdir`
```bash
# 加 --verbose 看完整日志
npm ...