现在我有3个文件和一个文件夹在同一目录中,如下所示。 index.html
会在.css
文件夹中请求.js
,/img
(ReactJS)和图片。
经过大量的搜索和尝试,我知道我可以使用以下内容创建文件服务器,以便为/
内的文件提供client/index
网址请求。
http.Handle("/", http.StripPrefix("/", http.FileServer(http.Dir("client/index"))))
效果很好。但它只提供静态文件,我希望在转出之前对html文件进行一些更改,例如修改标记<input id='projectId' type='hidden' value={{.projectId}}/>
中的值。因此,我需要注册一个HandleFunc('/', handler)
来执行html模板,但url /
已经用于实现文件服务器。
在为文件系统(.css
,.js
和文件夹img
内的图像)提供文件系统请求的同时,动态修改html的正确方法是什么?
server / pghndler / index / index.go
package index
func RegisterHandlers() {
http.Handle("/", http.StripPrefix("/", http.FileServer(http.Dir("client/index"))))
http.HandleFunc("/login", loginHandler)
}
答案 0 :(得分: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
}
将网络资源组织到像“css”和“js”这样的目录中是很常见的,所以将它们用于虚假路径也许是有道理的 - 然后当你的应用程序增长并希望更好地组织它时,它更容易做到