我有3个页面:index.hml,admin.html和host.html。我在脚本标签内的页面上有javascript。我想将所有javascript移动到一个文件,并在每个页面上都有。
我尝试从我的html网页链接到JS文件,例如:
<script src="static/app.js" type= "text/javascript"></script>
但我一直收到错误:
Uncaught SyntaxError: Unexpected token <
我尝试过使用此src路径,包括将app.js文件移动到与html文件相同的级别,并将src更改为&#34; app.js&#34;但是仍然会给出相同的错误信息。
这让我觉得这是由于服务器如何呈现文件(使用ServeMux)。
我的代码是:
func requestHandler(tpl *template.Template) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
tpl.Execute(w, r)
})
}
func main() {
flag.Parse()
user := template.Must(template.ParseFiles("index.html"))
admin := template.Must(template.ParseFiles("admin.html"))
host := template.Must(template.ParseFiles("host.html"))
router := http.NewServeMux()
router.Handle("/", requestHandler(user))
router.Handle("/admin", requestHandler(admin))
router.Handle("/host", requestHandler(host))
log.Fatal(http.ListenAndServe(":8081", router))
}
我搜索了SO并尝试了很多东西,包括:
http.Handle("/js", http.FileServer(http.Dir("static/")))
在static / app.js中有一个javascript文件但是这只是呈现我的索引页面没有加载JS。我似乎无法将JS文件加载到页面中。
我还试过阅读JS文件,更改内容类型并将JS文件写入编写器,如下所示:
data, err := ioutil.ReadFile("app.js")
if err != nil {
fmt.Println("error: ", err)
return
}
w.Header().Add("Content Type", "application/javascript")
w.Write(data)
然而,这只是将所有文本呈现给页面,而JS没有运行,并且文本没有呈现为HTML。在页面上我看到:
alert("loaded");<!DOCTYPE html>
<html>
<head>
<title>Example</title>
index.html标题是:
<!DOCTYPE html>
<html>
<head>
<title>Chat Example</title>
</script>
<script src="static/app.js" type= "text/javascript"></script>
我觉得有必要更轻松地加载JS。这是尝试2,有更多的解释,代码和我尝试过的例子。
答案 0 :(得分:0)
您必须在HTML中引用该脚本:
<html>
<head>
<script src="/js/app.js"></script>
...
</head>
<body>...</body>
</html>
另请注意,为了服务整个目录,多路复用器中注册的路径应该有一个尾部斜杠:
http.Handle("/js/", http.FileServer(http.Dir("static/")))