登录
首页 >  Golang >  Go问答

Go http.FileServer 不提供所有静态内容

来源:stackoverflow

时间:2024-03-16 12:27:30 129浏览 收藏

在使用 Go 的 `http.FileServer` 提供静态内容时,遇到无法为特定路径提供所有内容的问题。该问题仅提供目录中的 `index.html` 文件,导致其他必需文件(如 JavaScript)无法提供,从而影响了界面的正常运行。文章探讨了可能的原因,并提供了修改代码的解决方案,以成功提供所有必需的静态内容。

问题内容

我有一个用 go-swagger 生成的 api。然后,我实现了中间件,以便能够为特定路径提供我的 swagger ui。但是,它仅提供我的 swagger-ui 目录中的 index.html 文件,因此 ui 无法运行,因为它缺少所有其他 javascipt 等。

我似乎无法弄清楚发生了什么以及为什么它没有为他们服务。如果有人有任何想法,我当然可以提供一些帮助。

我的文件结构:

/api-project   
   cmd
     main.go   
   gen   
   swagger-ui
     index.html
     swagger.json
     swagger-ui.css
     favicon-16x16.png
     ...

提供静态 swagger-ui 站点的中间件:

func UIMiddleware(handler http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {

        // Shortcut helpers for swagger-ui
        if r.URL.String() == "/swagger-ui" || r.URL.String() == "/api/help" {
            http.Redirect(w, r, "/swagger-ui/", http.StatusFound)
            return
        }
        // Serving ./swagger-ui/
        if r.URL.String() == "/swagger-ui/" {
            Logger.Printf("Serving up SwaggerUI")
            http.StripPrefix("/swagger-ui/", http.FileServer(http.Dir("swagger-ui"))).ServeHTTP(w, r)
            return
        }
        handler.ServeHTTP(w, r)
    })
}

解决方案


修改我的代码如下。现在可以了。

func UIMiddleware(handler http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {

        // Shortcut helpers for swagger-ui
        if r.URL.Path == "/swagger-ui" || r.URL.Path == "/api/help" {
            http.Redirect(w, r, "/swagger-ui/", http.StatusFound)
            return
        }
        // Serving ./swagger-ui/
        if strings.Index(r.URL.Path, "/swagger-ui/") == 0 {
            Logger.Printf("Serving up SwaggerUI")
            http.StripPrefix("/swagger-ui/", http.FileServer(http.Dir("swagger-ui"))).ServeHTTP(w, r)
            return
        }
        handler.ServeHTTP(w, r)
    })
}

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>