tRPC

tRPC 是一个用于构建类型安全的 API 的框架。它的全称是 TypeScript Remote Procedure Call,即 TypeScript 远程过程调用。

.
└── trpc/
    ├── controllers/
    │   └── ...
    ├── routers/
    │   └── ...
    ├── scripts/
    │   └── ...
    ├── serializer/
    │   └── ...
    ├── utils/
    │   └── ...
    ├── context.ts
    └── trpc.ts

controllers

controller(控制器)是业务逻辑真正的实现,处理输入数据、数据库交互在这里进行。

routers

routers(路由)是 tRPC 用于路由请求的入口,它负责验证用户输入是否合法,验证用户身份,并将请求传递给 controller 。

serializer

serializer(序列化函数)负责筛选过滤数据库返回的数据,使用户不应看到的数据被过滤掉,使用场景如去除用户密码等。

utils

utils(工具函数)是存放了一些常用的工具函数,如 JWT 的生成和校验、密码的加密和解密等。还包含一个内部使用的 Result 类,在 controller 和 routers 之间使用。

context.ts

context(上下文)是 tRPC 服务的上下文,每当有一个请求被处理时,tRPC 会创建一个上下文,并将其传递给 routers 。在创建上下文时,会解密请求 headers 中包含的 JWT,将其解析为用户对象,还会将全局的 controllers 实例附在上下文,以便在 routers 中使用。

trpc.ts

这是 tRPC 服务的入口,所有请求都经由前文提到过的 API Handler 传递给这里进行处理。这里也包含验证用户身份的 middleware(中间件)逻辑。