2016-07-24 2 views
0

Теперь у меня есть 3 файла и папка в том же каталоге, что и следующая. index.html запросит .css, .js (ReactJS) и изображения в папке /img.Обслуживание динамического файла HTML с помощью `html/template`, а также обслуживание файлового сервера для размещения файлов CSS, JS и изображений в том же каталоге

enter image description here

После довольно много поиска и попробовать, я знаю, что я могу использовать следующее, чтобы сделать файловый сервер для обслуживания запроса / URL-адреса для файлов внутри client/index.

http.Handle("/", http.StripPrefix("/", http.FileServer(http.Dir("client/index")))) 

Это хорошо работает. Но он служит только для статических файлов, и я хочу внести некоторые изменения в html-файл перед переносом, например, для изменения значения в теге <input id='projectId' type='hidden' value={{.projectId}}/>. Поэтому мне нужно зарегистрировать HandleFunc('/', handler) для выполнения шаблона html, но url / уже используется для реализации файлового сервера.

Что такое правильный способ изменить HTML динамически, а также обслуживать запросы к файловой системе для файлов (.css, .js и изображений в папке img)?

сервер/pghndler/индекс/index.go

package index 

func RegisterHandlers() { 
    http.Handle("/", http.StripPrefix("/", http.FileServer(http.Dir("client/index")))) 
    http.HandleFunc("/login", loginHandler) 
} 

ответ

1

Мне кажется, что самый простой способ (меньше кода) делать вид, как будто ваши статические файлы находятся в другом каталоге, скажем, «статические ». Это означает, что вы должны изменить путь в HTML файл (ы), где вы ссылаетесь на них, то есть, где вы имели

<link rel="stylesheet" href="clent.css" type="text/css"> 

заменить его

<link rel="stylesheet" href="static/clent.css" type="text/css"> 

Затем в коде сервера вы может иметь обработчик для пути static и до сих пор используют / для динамического материала, т.е.

func main() { 
    http.HandleFunc("/", hh_root) 
    http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("/home/Casper/public/client/index/")))) 
    http.ListenAndServe(":8080", nil) 
} 

func hh_root(w http.ResponseWriter, r *http.Request) { 
    // generate response from template 
} 

это является общим для организации веб-ресурсов в директорию ectories типа «css» и «js», поэтому, возможно, имеет смысл использовать их для поддельных путей - тогда, когда ваше приложение растет, и вы хотите организовать его лучше, это проще сделать.