全书目录

第三十六篇:Koa 完全指南 —— 洋葱关卡巡防宇宙

第十章:常见误区 —— 洋葱巡防塔最容易翻车的地方

2 分钟 693 字 第 693 / 962 个阅读单元
#1. 误以为 Koa 自带路由、body parser、校验全家桶

不是。
Koa core 很薄,很多能力都要靠生态模块拼起来。

#2. 写了 next() 却不 await next()

这会把洋葱模型的上下游逻辑搞乱。
Koa 的核心不是“调用一下 next”,而是等下游回来

#3. 忘了设置 ctx.body

Koa 默认状态码是 404。
你以为 handler 跑完就算成功,实际上客户端可能拿到的是 404。

#4. 在 ctx 上到处乱挂字段

中间件共享数据优先用 ctx.state
别把 ctx 自己变成一个随手乱贴便签的墙。

#5. 直接操作原始 res.write() / res.end()

Koa 官方明确不建议你绕过自己的响应系统。
除非你非常确定在干什么,否则就用 ctx.bodyctx.statusctx.set()

#6. 滥用 app.context

app.context 可以做全局扩展,但官方也明确提醒这可能变成一种反模式。
请求内数据流转,优先还是 ctx.state
只有非常明确的全局能力,才考虑挂到 app.context

#7. 拿旧时代教程里的 generator 中间件来学

Koa v1 那套历史写法别再抄了。
到 2026 年,你应该默认站在 async/await 和 Koa v3 的语境里理解它。

#8. 以为 Koa 的“轻”就等于“更简单”

不是。
Koa 的轻,换来的是更高的架构自觉要求。
你少了框架包办,也就更要自己决定:

  • 中间件边界怎么划
  • 错误格式怎么统一
  • 路由层和业务层怎么分
  • 共享上下文怎么治理