iris 的 app.onerrorcode 是全局机制,不支持为 app.party 分组单独设置;v1.onerrorcode 无效,分组级错误处理需用中间件按路径前缀手动拦截并渲染对应模板。

app.Party 分组后不能直接调用 OnErrorCode
Iris 的 app.OnErrorCode 是全局注册机制,绑定到整个应用实例,不支持为某个 app.Party 分组单独设置 404 或 500 处理器。你调用 v1.OnErrorCode(iris.StatusNotFound, ...) 是无效的——v1 是 Party 实例,没有 OnErrorCode 方法,编译会报错。
分组级错误处理只能靠中间件 + 路径前缀判断
想让 /v1/xxx 出错时走 v1 专属的错误页,而 /v2/xxx 走另一套,得手动在中间件里拦截并区分路径前缀:
- 注册一个全局中间件,在
ctx.Next()后检查ctx.Response().StatusCode() - 若状态码是 404 且
ctx.Path()以/v1/开头,就手动渲染 v1 的 404 模板,再调ctx.StopExecution() - 同理处理 500:检查路径前缀 + 状态码,再决定用哪套日志格式和响应体
- 注意:必须在
ctx.Next()之后读取状态码,因为 handler 才会真正设置它
为什么不能用 FindClosest 做分组级推荐?
ctx.FindClosest(3) 返回的是全量已注册路由中编辑距离最近的路径,不区分分组。比如你在 v1 := app.Party("/v1") 下注册了 v1.Get("/users", ...),但用户访问 /v2/userz 时,FindClosest 仍可能返回 /v1/users —— 它只比对字符串,不校验前缀是否匹配。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
若真要分组内推荐,得自己遍历 app.Routes().GetRoutes(),过滤出路径以当前分组前缀开头的路由,再做编辑距离计算。但这开销大、易出错,生产环境不建议。
最容易被忽略的点:404 处理器本身也会被路由匹配
如果你写了 app.OnErrorCode(iris.StatusNotFound, notFoundHandler),然后又注册了 app.Get("/404", ...),那当用户访问 /404 时,Iris 会先匹配到这个显式路由,根本不会触发你的 404 处理器。更隐蔽的是:某些泛匹配路由(如 app.Get("/{path:path}", ...))会吞掉所有未命中路由,导致 OnErrorCode 彻底失效。
务必确认:你的 404 处理器注册在所有常规路由之前,且没有兜底通配路由挡在前面。










