路由处理
404/405 错误处理与路由配置
路由处理
Bamboo Base 提供路由错误处理和配置功能。
404 处理
处理不存在的路由:
func SetupRouter(r *gin.Engine) {
// 其他路由...
// 404 处理(放在最后)
r.NoRoute(func(c *gin.Context) {
c.JSON(404, BaseResponse{
Code: 404001,
Message: "请求的资源不存在",
Timestamp: time.Now().UnixMilli(),
})
})
}响应示例:
{
"code": 404001,
"message": "请求的资源不存在",
"timestamp": 1640995200000
}405 处理
处理不支持的 HTTP 方法:
func SetupRouter(r *gin.Engine) {
// 其他路由...
// 405 处理
r.NoMethod(func(c *gin.Context) {
c.JSON(405, BaseResponse{
Code: 405001,
Message: fmt.Sprintf("不支持的请求方法: %s", c.Request.Method),
Timestamp: time.Now().UnixMilli(),
})
})
}响应示例:
{
"code": 405001,
"message": "不支持的请求方法: DELETE",
"timestamp": 1640995200000
}路由配置
基础路由
func SetupRouter(r *gin.Engine) {
// GET 请求
r.GET("/ping", pingHandler)
// POST 请求
r.POST("/users", createUserHandler)
// PUT 请求
r.PUT("/users/:id", updateUserHandler)
// DELETE 请求
r.DELETE("/users/:id", deleteUserHandler)
// 支持多种方法
r.Any("/webhook", webhookHandler)
}路由组
func SetupRouter(r *gin.Engine) {
// API 路由组
api := r.Group("/api")
{
// /api/users
api.GET("/users", listUsersHandler)
api.POST("/users", createUserHandler)
// /api/orders
api.GET("/orders", listOrdersHandler)
}
// 带中间件的路由组
auth := r.Group("/api/admin")
auth.Use(middleware.AuthMiddleware())
{
auth.GET("/dashboard", dashboardHandler)
auth.GET("/settings", settingsHandler)
}
}静态文件
func SetupRouter(r *gin.Engine) {
// 静态文件服务
r.Static("/static", "./static")
// 单个静态文件
r.StaticFile("/favicon.ico", "./static/favicon.ico")
// 静态文件系统
r.StaticFS("/uploads", http.Dir("./uploads"))
}路由参数
路径参数
func GetUser(c *gin.Context) {
// /users/:id
id := c.Param("id")
// /files/*filepath
filepath := c.Param("filepath")
}查询参数
func ListUsers(c *gin.Context) {
// /users?page=1&size=10
page := c.DefaultQuery("page", "1")
size := c.DefaultQuery("size", "10")
// 必需参数
name := c.Query("name")
}表单参数
func CreateUser(c *gin.Context) {
username := c.PostForm("username")
email := c.PostForm("email")
// 带默认值
role := c.DefaultPostForm("role", "user")
}完整路由配置示例
package main
import (
"github.com/bamboo-services/bamboo-base-go/web"
"github.com/bamboo-services/bamboo-base-go/web/result"
"github.com/gin-gonic/gin"
)
func SetupRouter(r *gin.Engine) {
// 健康检查
r.GET("/health", func(c *gin.Context) {
result.Success(c, "healthy")
})
// API 路由组
api := r.Group("/api/v1")
{
// 公开路由
api.POST("/login", loginHandler)
api.POST("/register", registerHandler)
// 需要认证的路由
auth := api.Group("")
auth.Use(middleware.AuthMiddleware())
{
auth.GET("/profile", profileHandler)
auth.PUT("/profile", updateProfileHandler)
}
}
// 静态文件
r.Static("/uploads", "./uploads")
// 404 处理
r.NoRoute(func(c *gin.Context) {
result.Error(c, error.New(404001, "请求的资源不存在"))
})
// 405 处理
r.NoMethod(func(c *gin.Context) {
result.Error(c, error.New(405001, "不支持的请求方法"))
})
}
func main() {
r := web.Default()
SetupRouter(r)
r.Run(":8080")
}