Используя GOA , я определил службу для обслуживания статических файлов с использованием подстановочного знака (как описано в документации ):
var _ = Service("static", func() {
Files("/static/*filepath", "./static/")
})
Но когда я запускаюслужба, конечная точка всегда извлекает все содержимое, которое находит в каталоге . / static / , кажется, что она вообще не учитывает раздел с подстановочными знаками.
Например, если у меня есть . / Static / uploads / file1.jpg , и я запрашиваю localhost / static / uploads / file1.jpg или localhost / static /что-нибудь , то служба извлекает следующее:
<code><pre>
<a href="uploads/">uploads/</a>
Копаясь в коде, я считаю, что проблема в сгенерированном / gen / http / static /server / server.go file:
// Mount configures the mux to serve the static endpoints.
func Mount(mux goahttp.Muxer, h *Server) {
MountCORSHandler(mux, h.CORS)
MountStatic(mux, http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
http.ServeFile(w, r, "./static/")
}))
}
// MountStatic configures the mux to serve GET request made to
// "/static/*filepath".
func MountStatic(mux goahttp.Muxer, h http.Handler) {
mux.Handle("GET", "/static/*filepath", handleStaticOrigin(h).ServeHTTP)
}
Насколько я вижу, сгенерированный код служит тому, что мы передали в качестве базового пути, несмотря ни на что, он не учитывается, если мы настроилиподстановочный знак вообще (он использует его только для соответствия запросу, но не для настройки файла, который мы будем обслуживать).
Я считаю, что это работало нормально в v2, я обнаружил эту проблему в процессе миграции на v3.
Как я уже сказал, это похоже на ошибку в GOA, но, возможно, я чего-то здесь упускаю. Я создал проблему в репо для получения дополнительной информации ( # 2321 )