用途
backend-patterns 是一套后端架构模式与最佳实践集合,面向需要构建可扩展、可维护服务端应用的开发者。资料明确针对 Node.js、Express 和 Next.js API 路由场景,通过代码示例展示常见后端问题的解决模式。
主要能力
API 设计模式
资料给出基于资源的 RESTful API 结构示例,包括列表、获取单个资源、创建、替换、更新和删除等操作对应的 HTTP 方法与 URL 形式。同时说明使用查询参数处理过滤、排序和分页,例如按状态过滤、按 volume 排序以及 limit/offset 分页。
Repository 模式
通过接口抽象数据访问逻辑,示例定义了 MarketRepository 接口,包含 findAll、findById、create、update、delete 等方法,并给出基于 Supabase 的实现类示例,展示如何在查询中按条件过滤和限制数量。
Service 层模式
将业务逻辑与数据访问分离,示例中的 MarketService 依赖注入 MarketRepository,在 searchMarkets 方法中组合生成 embedding、向量搜索、按 id 批量获取完整数据以及按相似度排序等步骤。
中间件模式
展示请求/响应处理管道的写法,示例 withAuth 高阶函数从 Authorization 头提取 token,校验失败返回 401,成功则将用户信息挂到 req.user 后继续执行处理器。
数据库模式
包含查询优化示例,强调只选择需要的列而非 select('*');N+1 查询预防示例,展示先批量获取 creatorIds 再一次性查询用户并用 Map 映射;事务模式示例,通过 Supabase RPC 调用 SQL 函数 create_market_with_position,在函数内插入 markets 与 positions 并处理异常回滚。
缓存策略
提供 Redis 缓存层示例,CachedMarketRepository 在 findById 中先查缓存,未命中则查库并写入缓存(setex 300 秒),并提供 invalidateCache 方法。另有 Cache-Aside 模式示例,展示先查缓存、未命中查库、再更新缓存的流程。
错误处理模式
集中式错误处理器示例定义 ApiError 类,区分 ApiError、ZodError 与未知错误,分别返回对应状态码与错误信息,并记录意外错误。重试模式示例 fetchWithRetry 使用指数退避(1s、2s、4s)进行最多 3 次重试。
认证与授权
JWT 校验示例使用 jsonwebtoken 的 verify 方法解析 payload,失败抛出 401;requireAuth 从请求头提取 token 并校验。基于角色的访问控制示例定义 admin、moderator、user 三种角色及其权限列表,并提供 hasPermission 与 requirePermission 高阶函数。
限流
简单内存限流器示例 RateLimiter 使用 Map 记录每个标识符的请求时间戳,在时间窗口内超过最大请求数则拒绝,示例按 IP 限制每分钟 100 次请求,超限返回 429。
后台任务与队列
简单队列模式示例 JobQueue 提供 add 方法将任务入队,内部 process 循环依次执行任务并捕获错误,示例用于市场索引任务,接口收到请求后将任务入队并立即返回。
日志与监控
结构化日志示例 Logger 类输出包含 timestamp、level、message 及上下文字段的 JSON,提供 info、warn、error 方法,error 方法额外记录错误消息与堆栈。示例在 API 路由中生成 requestId 并记录请求信息与错误。
使用方式
资料以代码片段形式呈现各模式,开发者可根据自身技术栈(Node.js、Express、Next.js API 路由)参考对应示例进行实现。资料末尾提示:后端模式有助于构建可扩展、可维护的服务端应用,应选择适合自身复杂度水平的模式。
适用场景
适用于使用 Node.js、Express 或 Next.js API 路由构建服务端应用的开发者,尤其是需要处理 API 设计、数据库查询优化、缓存、错误处理、认证授权、限流、后台任务和日志等常见后端问题的场景。
限制
资料未提供安装命令、包依赖清单、版本要求、收费信息或平台支持范围。部分示例依赖 Supabase、Redis、jsonwebtoken、zod 等具体库,但资料未说明这些依赖的安装与配置方式。