gorilla mux устанавливает неверный путь для файлов stati c при использовании переменных - PullRequest
0 голосов
/ 27 апреля 2020

У меня настроена следующая маршрутизация:

func (app *application) routes() *mux.Router {
    r := mux.NewRouter()
    fs := http.FileServer(http.Dir("./ui/static/"))
    r.PathPrefix("/ui/static/").Handler(http.StripPrefix("/ui/static/", fs))

    authRequired := r.PathPrefix("/").Subrouter()

    authRequired.HandleFunc("/foo", app.foo).Methods("POST") // <- this one works fine
    authRequired.HandleFunc("/bar/{id:[0-9]+}", app.bar) // <- this does not

    return r
}

Когда я звоню по URL http://server/foo, все в порядке.
С, например, http://server/bar/1 сайт доставляется, но я получаю сообщения об ошибках типа

The resource "http://server/bar/ui/static/css/style.css" has been blocked due to mime type mismatch

/bar в http://server/bar/ui/static/... не должно быть там. Как мне это исправить?

1 Ответ

2 голосов
/ 27 апреля 2020
The resource "http://server/bar/ui/static/css/style.css" has been blocked due to mime type mismatch

Ошибка "несоответствие типов mime" иногда является результатом того, что файл не найден, и браузер получает какой-то ответ по умолчанию, тело которого содержит не css, но, вероятно, просто какой-то простой текст, или html самое большее.

Если вы посмотрите на путь, вызывающий ошибку:

http://server/bar/ui/static/css/style.css

А затем путь, по которому вы зарегистрировали свои данные c обработчик файла:

r.PathPrefix("/ui/static/").Handler( ...

Вы увидите, что браузер ищет файл не в том месте, и если вы считаете, что эта конкретная c ошибка возникает именно тогда, когда вы на /bar вы Можно сделать вывод, что проблема вызвана относительными ссылками в файлах html (и / или stati c, правильно связанных с html), обслуживаемых обработчиком /bar.

Итак, решение это использовать абсолютные пути в ваших файлах * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 10 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 10 * 10 * * * * 10 * 10 *.

Обратите внимание, что /foo, кажется, зарегистрирован под e POST, такая конечная точка не заставит браузер выдавать последующие запросы на файлы stati c, как может * html, возвращая конечную точку GET, поэтому у нее нет причины сбой с файлом stati c " "Несоответствие типов MIME".

...