Iris中通过app.Party()创建带前缀的路由组,如app.Party("/api")后调用.Get("/users")实际匹配/api/users;前缀支持嵌套、自动标准化末尾斜杠,但中间件需手动挂载,不自动继承。

使用 iris.Party() 创建带前缀的路由组
在 Iris 中,统一前缀不是靠全局配置,而是通过 Party() 方法显式创建子路由器。它返回一个新 iris.Party 实例,后续所有注册的路由自动附加指定前缀。
常见错误是试图修改 app 根实例的路径,或误以为 app.UseRouter() 能接管前缀——它只用于中间件挂载,不改路径。
-
app.Party("/api")返回的组,.Get("/users")实际匹配GET /api/users - 前缀支持嵌套:
app.Party("/admin").Party("/v1")→/admin/v1/xxx - 前缀末尾的
/会被自动标准化(/api/和/api效果一致)
中间件和子组的继承关系要手动传递
Party() 创建的组默认不继承父组中间件,这点容易被忽略。如果你在根 app 上用了 JWT 验证中间件,/api 组不会自动带上它。
正确做法是显式调用 .Use() 或在创建时传入:
api := app.Party("/api")
api.Use(authMiddleware) // 手动挂载
api.Get("/users", handler)
或者更紧凑地写成:
api := app.Party("/api").Use(authMiddleware)
注意:子组(如 api.Party("/v2"))也不会自动继承 api 的中间件,必须重复挂载或链式传递。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
静态文件与前缀路由的路径映射要对齐
如果用 Party("/static") 提供静态资源,别直接写 .HandleDir("/", "./public") —— 这会让请求 /static/logo.png 去找 ./public/static/logo.png,而不是 ./public/logo.png。
解决方案是调整本地路径映射:
- 用
.HandleDir("/", "./public")时,确保访问路径与磁盘结构一致(即把文件放进./public/static/) - 更推荐用
.HandleDir("/static", "./public"),这样/static/logo.png映射到./public/logo.png - 若用
Party("/assets"),对应应为.HandleDir("/assets", "./public")
测试带前缀路由时注意请求路径拼接
用 httptest.NewRecorder() 测试时,req, _ := http.NewRequest("GET", "/users", nil) 在 /api 组里根本不会命中——必须写 /api/users。
建议把测试逻辑封装进组内,避免硬编码前缀:
api := app.Party("/api")
api.Get("/users", userHandler)
// 测试时
req, _ := http.NewRequest("GET", "/api/users", nil)
如果前缀可能变化(如环境变量控制),可提取为常量,但不要依赖运行时动态重写路由树——Iris 的路由在启动时已固化,改前缀只能重启服务。
真正麻烦的是跨组同名路由(比如 app.Get("/health") 和 api.Get("/health")),它们会共存,但调试时容易混淆哪个先被匹配;Iris 按注册顺序匹配,没有隐式优先级。


















