竹简文档

路由处理

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")
}

下一步

On this page