Как мне обслуживать CSS и JS в Go
Я следовал учебнику Go Writing Web Applications, но по какой-то причине у меня возникли проблемы с получением приложения для обслуживания CSS и JS. Если я запускаю свою статическую страницу без сервера Go, CSS страницы работает нормально. С другой стороны, когда я запускаю сервер Go, CSS просто не работает.
Вот как выглядит мой HTML-код:
<link rel="stylesheet" href="../assets/css/bootstrap.min.css">
<link rel="stylesheet" href="../assets/css/bootstrap-theme.min.css">
<link rel="stylesheet" href="../assets/css/custom.css">
затем под тегом body
:
<script src="../assets/js/jquery.min.js"></script>
<script src="../assets/js/bootstrap.min.js"></script>
Мое дерево файлов выглядит так:
go-affect/
├── data
│ └── …
├── static
│ ├── css
│ │ └── …
│ └── js
│ │ └── …
├── tmpl
│ ├── edit.html
│ ├── index.html
│ └── view.html
└── main.go
Как мне заставить мое приложение Go обслуживать нужные мне CSS и JavaScript?
С тех пор проблема была решена, вот рабочая главная:
func main() {
http.HandleFunc("/view/", makeHandler(viewHandler))
http.HandleFunc("/edit/", makeHandler(editHandler))
http.HandleFunc("/save/", makeHandler(saveHandler))
http.HandleFunc("/index/", makeHandler(indexHandler))
http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("static"))))
http.ListenAndServe(":8080", nil)
}
Вот пример используемых мной обработчиков:
func indexHandler(w http.ResponseWriter, r *http.Request, title string) {
p := &Page{Title: title}
err := templates.ExecuteTemplate(w, "index.html", p)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
}
}
Ответы
Ответ 1
http.Handle("/", http.FileServer(http.Dir("css/")))
Будет обслуживать ваш каталог css
в /
. Конечно, вы можете обслуживать любой каталог по любому выбранному вами пути.
Вы, вероятно, хотите убедиться, что статический путь не мешает другим путям, и использовать что-то вроде этого.
http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("static"))))
Поместите ваши js
и css
в директорию static
вашего проекта. Затем они будут обслуживаться по адресу domain.com/static/css/filename.css
и domain.com/static/js/filename.js
Метод StripPrefix
удаляет префикс, поэтому он не пытается искать, например, в static
каталоге static/css/filename.css
который, конечно, он не найдет. Он будет искать css/filename.css
в static
каталоге, что будет правильно.
Ответ 2
Я добавил ссылку на мой сервер Apache css dir в раздел head моих файлов шаблонов. Я храню шаблоны и файлы данных, используемые любым приложением go, в директории dir, из которой запущено приложение go. В этом случае cgi-bin.
Шаблон использует CSS из моего каталога Apache Server assets/css
:
<link rel="stylesheet" href="/assets/css/main.css" />
запускайте приложения из моего каталога cgi-bin
листы sytle подаются из моих активов apache/css dir