buffalo routes 命令能直接列出所有注册路由,以表格形式输出Method、Path、Route、Handler和Middlewares五列,默认不显示手动注册的OPTIONS路由,需在项目根目录执行且确保app.go中App()函数正常调用。

buffalo routes 命令能直接列出所有注册路由
Buffalo 自带 buffalo routes 命令,运行后会以表格形式输出当前项目所有已注册的 HTTP 方法、路径、处理函数和中间件链。它不依赖额外插件或配置,只要项目结构完整(app.go 正常加载路由),就能立刻生效。
常见错误现象:执行后报 panic: no app found 或空输出——大概率是没在项目根目录下运行,或 app.go 里 App() 函数没被正确调用(比如被注释了、或 main.go 没 import 当前包)。
- 必须在项目根目录执行(即包含
actions/、app.go的那一层) - 确保
app.go中的App()函数返回值被赋给了全局变量(如var app *buffalo.App),且未被条件编译屏蔽 - 如果用了自定义环境(如
GO_ENV=staging),需显式带上:GO_ENV=staging buffalo routes,否则可能漏掉只在该环境下注册的路由
输出字段含义和过滤技巧
默认输出含五列:Method、Path、Route(处理函数全名)、Handler(实际绑定的函数地址)、Middlewares。其中 Route 列最实用,比如 Users#Show 表示 actions.Users#Show 函数。
实际使用中常需要筛选:
- 查某个控制器的所有路由:
buffalo routes | grep "Users#" - 只看 POST 路由:
buffalo routes | awk '$1=="POST"' - 导出为 CSV 方便分析:
buffalo routes --format=csv > routes.csv(--format支持csv和json)
--format=json 输出的是数组,每项含 method、path、handler 等键,适合脚本解析;但注意它不会展开中间件列表,只显示中间件数量。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
为什么 buffalo routes 不显示 OPTIONS 预检路由
buffalo routes 默认不列出手动注册的 OPTIONS 路由——哪怕你在 app.go 里写了 app.Options("/api/users", ...),它也不会出现在输出里。这是 Buffalo 的设计限制:该命令只扫描通过 app.Get/app.Post 等标准方法注册的路由,而 app.Options 是独立注册逻辑,不纳入 Cobra 路由树。
所以如果你依赖 OPTIONS 处理跨域,不能只靠这个命令确认是否生效:
- 手动检查
app.go中是否有app.Options(...)调用 - 用
curl -I -X OPTIONS http://localhost:3000/api/users实测响应头是否含Access-Control-Allow-Methods - 别指望
--format=json能帮你发现遗漏的预检路由
开发阶段路由变更后要重新运行命令
buffalo routes 是运行时反射获取的,不是静态分析源码。这意味着:
- 改了
app.go新增一个app.Get("/test", ...),必须保存文件再运行命令才能看到 - 如果路由注册逻辑被
if GO_ENV == "production"包裹,开发环境下运行命令就看不到那条路由 - 它不会检测
grifts/里的临时路由(那些是用于迁移或调试的,不走主路由链)
最容易被忽略的是:Buffalo 的路由注册顺序影响匹配优先级,但 buffalo routes 输出顺序和实际匹配顺序无关——它按内部 map 遍历输出,不可靠。真要验证路由是否被正确捕获,还是得靠 curl 或浏览器访问测试。


















