如何为异步中间件链建立请求上下文、返回值与错误传播的类型契约
简答题困难378 次浏览
参考答案与解析
# 核心结论
异步中间件链的类型契约应同时回答四个问题:上下文由谁创建以及哪些字段可用;next 返回什么结果;错误通过异常拒绝还是显式结果传播;中间件是否允许短路。不要未经设计就统一写成 Promise<any>。如果各层主要修改共享上下文,通常采用 Middleware<C> = (ctx: C, next: Next) => Promise<void>;如果下游需要向上游返回业务结果,则应将结果类型参数化。类型可以约束参数和结果,却无法静态保证同一个 next 只调用一次,这一不变量必须由组合器在运行时检查。
# 底层机制
典型洋葱模型中,中间件在 await next() 之前按注册顺序执行
