我正在尝试提供静态 html 文件,并且该文件具有指向其他资源的脚本标记。我想从一个目录提供 html 文件,然后将资产请求重定向到另一个目录。这就是我现在的设置方式:
// server.go
import (
"fmt"
"html/template"
"log"
"net/http"
"path"
"time"
)
func handle(w http.ResponseWriter, r *http.Request) {
lp := path.Join("./", "index.html")
fmt.Println(lp)
tmpl, err := template.ParseFiles(lp)
if err != nil {
log.Fatal(err)
}
tmpl.ExecuteTemplate(w, "index", nil)
}
func main() {
fs := http.FileServer(http.Dir("../../app_assets/"))
http.Handle("/assets", fs)
http.HandleFunc("/static/", handle)
fmt.Println("Go Server listening on port 8000")
http.ListenAndServe(":8000", nil)
}
这是我的模板:
<!-- index.html -->
{{define "index"}}
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<link rel="stylesheet" href="assets/css/libs.css" type="text/css" />
</head>
<body>
<script type="text/javascript" src="assets/js/libs.js"></script>
<h1> Hello </h1>
</body>
</html>
{{end}}
我可以从 中提供索引文件localhost:8000/static/
,但资产请求不会转到上两级的资产文件夹 ( ../../
)。我究竟做错了什么?
笔记:
加载 libs.js 时,我在控制台中收到此错误:
Uncaught SyntaxError: Unexpected token <
这使我相信对libs.js
文件的请求被重定向到 html 标记。
这是怎么回事?
笔记2:
当我浏览请求的结果时libs.js
,我看到了 html 标记。即使StripPrefix
按照以下建议使用后。我究竟做错了什么?