Go http.FileServer не обслуживает весь контент c - PullRequest
0 голосов
/ 26 марта 2020

У меня есть API, сгенерированный с помощью go -swagger. Затем я реализовал промежуточное программное обеспечение, чтобы иметь возможность обслуживать мой пользовательский интерфейс для заданных c путей. Тем не менее, он только обслуживает файл index. html в моем каталоге swagger-ui, поэтому пользовательский интерфейс не работает, так как ему не хватает всего другого javascipt, и т. Д. c.

Я просто не могу показаться выяснить, что происходит и почему это не подает их. Я, конечно, мог бы использовать некоторую помощь, если у кого-то есть какие-либо идеи.

Моя структура файлов:

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

Промежуточное программное обеспечение для обслуживания stati c swagger -уй сайт:

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

1 Ответ

0 голосов
/ 26 марта 2020

Модифицировал мой код следующим образом. Теперь это работает.

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)
    })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...