Как отдавать статику через julienschmidt/httprouter?

Пытаюсь сделать отдачу статики и встраивание ее в бинарник с помощью go. В качестве роутера использую julienschmidt/httprouter.

|  
| - cmd
|    | - main.go
| 
| - static
|    | - build.go
|    | - frontend
|         | - index.html
|         | - favicon.ico
|         | - static
|              | - css
|              |    | - main.css
|              | - js
|              |    | -main.js

main.go
import (
    frontend "github.com/stasled/myproject/static"
)

func main() {
r := httprouter.New()

front, err := fs.Sub(frontend.Assets, "frontend")
if err != nil {
	log.Fatal().Err(err).Msg("failed to load frontend app")
}

fServer := http.StripPrefix("/", http.FileServer(http.FS(front)))
r.Handler("GET", "/", fServer)

r.Handler("GET", "/api", apiMethods) 
 // другие ручки и запуск сервера
}

build.go
package static

import "embed"

//go:embed frontend
var Assets embed.FS


При запросе:
/ - 200 отдает файл index.html

/index.html - 404
/favicon.ico - 404
/static/css/main.css - 404
/static/js/main.js - 404
  • Вопрос задан
  • 102 просмотра
Решения вопроса 1
@Chebaa Автор вопроса
На уровне папки frontend пришлось прописивать каждый ресурс отдельно, а на уровне папки static через *filepath

r.Handler("GET", "/", fServer)
	r.Handler("GET", "/favicon.ico", fServer)
	r.Handler("GET", "/static/*filepath", fServer)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
r.Handler("GET", "/", fServer)
Этот шаблон значит полное совпадение с корнем, поэтому у вас 404 на все вложенные страницы. Чтобы этого избежать сделайте так:

r.Handler("GET", "/*filepath", fServer)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 нояб. 2024, в 00:55
500 руб./за проект
21 нояб. 2024, в 23:30
300000 руб./за проект
21 нояб. 2024, в 22:21
3000 руб./в час