gpt4 book ai didi

go - 通过 `html/template` 提供动态 HTML 文件,同时提供用于在同一目录中托管 CSS、JS 和图像文件的文件服务器

转载 作者:数据小太阳 更新时间:2023-10-29 03:15:00 25 4
gpt4 key购买 nike

现在我在同一个目录中有 3 个文件和一个文件夹,如下所示。 index.html将请求 .css , .js (ReactJS) 和文件夹内的图像 /img .

enter image description here

经过大量搜索和尝试,我知道我可以使用以下内容来制作一个文件服务器来为 / 提供服务client/index 中文件的 url 请求.

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/index.go

package index

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

最佳答案

在我看来,最简单的方法(更少的代码)是假装你的静态文件好像在不同的目录中,比如“静态”。这意味着您必须更改您引用它们的 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
}

将 Web 资源组织到诸如“css”和“js”之类的目录中很常见,因此将这些资源用于假路径也许是有意义的 - 然后当您的应用程序增长并且您希望更好地组织它时,这样做会更容易.

关于go - 通过 `html/template` 提供动态 HTML 文件,同时提供用于在同一目录中托管 CSS、JS 和图像文件的文件服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38549197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com