buffalo中用resource路由可一键生成7个标准crud端点,需在app.serve()前注册;路径前缀不可带尾部斜杠,支持only/except筛选动作、分组加版本前缀和中间件。

在Buffalo中用Resource路由快速生成标准CRUD端点,避免手写7个重复路由和对应action函数。这一步必须在项目初始化后、app.Serve()启动前完成,否则注册无效。
创建Resource资源
执行命令生成带完整CRUD动作的resource:
buffalo generate resource users name:string email:string
该命令自动创建actions/users.go、models/user.go、migrations文件,并在routes/app.go中插入app.Resource("/users", UsersResource{})。注意:路径前缀不能以斜杠结尾,否则会导致404;若写成"/users/",所有POST/PUT请求都会失败。
理解Resource默认路由映射
Buffalo Resource按REST规范绑定7个HTTP方法与路径组合,无需额外配置:
GET /users → UsersResource.List
GET /users/new → UsersResource.New
GET /users/{id} → UsersResource.Show
GET /users/{id}/edit → UsersResource.Edit
POST /users → UsersResource.Create
PATCH /users/{id} → UsersResource.Update
DELETE /users/{id} → UsersResource.Destroy
所有路由都通过同一个UsersResource结构体的不同方法响应,底层复用同一套中间件栈和Context生命周期。这比逐个调用app.GET/app.POST更紧凑,但代价是无法为单个动词单独挂载中间件。
自定义Resource行为
方法一:覆盖特定Action方法
打开actions/users.go,找到UsersResource结构体,在Show方法内添加权限校验逻辑:
func (v UsersResource) Show(c buffalo.Context) error {
user := c.Param("id")
if user == "1" { return c.Error(403, errors.New("禁止访问管理员")) }
return c.Render(200, r.JSON(user))
}
方法二:禁用不需要的Action
Buffalo框架 1.0.1 版本源码包下载,适合需要错误处理改进、依赖更新、render.Download 注释和 request logger 调整的 v1 项目。
在routes/app.go中修改Resource注册语句,显式关闭Delete动作:
app.Resource("/users", UsersResource{}).Only("index,show,create,update")
【Only()和Except()不可同时使用】 否则编译时panic,且错误提示不明确,需手动删掉其中一个调用。
给Resource加版本前缀和中间件
第一步:在config/buffalo-app.go中定义带前缀的子路由器
api := app.Group("/api/v1")
第二步:将Resource挂载到该分组下
api.Resource("/users", UsersResource{})
第三步:为整个/api/v1分组添加鉴权中间件
api.Use(AuthMiddleware)
这样所有/users相关路由自动获得/api/v1前缀和AuthMiddleware保护,无需改每个action文件。注意:中间件必须在Resource注册之前调用Use(),顺序颠倒会导致中间件不生效。










