问题

使用GIN自带静态资源服务器需要设置一个子目录,而这对于Vue项目来说显然是不合理的,如果使用根目录则会和其他路由冲突,所以需要对静态资源针对性处理

原理

使用Gin的中间件实现过滤API请求,statik用来打包Vue项目资源

解决方案

将api相关路由统一设置在/api

这里直接给出中间件的代码

func ProcessStaticFiles(c *gin.Context) {
    path := c.Request.URL.Path

    // API 跳过
    if strings.HasPrefix(path, "/api") {
        c.Next()
        return
    }

    statikFS, err := fs.New()
    if err != nil {
        log.Fatal(err)
    }
    //此处处理静态资源
    fileServer := http.FileServer(statikFS)
    fileServer.ServeHTTP(c.Writer, c.Request)
    //处理完静态资源,调用c.Abort()中断请求
    c.Abort()
}

这样在实现能够直接访问到Vue项目的同时不影响后端API的路由