golang包含渲染模板时的javascript文件

时间:2018-05-01 15:02:40

标签: javascript go

我有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,有更多的解释,代码和我尝试过的例子。

1 个答案:

答案 0 :(得分:0)

您必须在HTML中引用该脚本:

<html>
    <head>
        <script src="/js/app.js"></script>
        ...
    </head>
    <body>...</body>
</html>

另请注意,为了服务整个目录,多路复用器中注册的路径应该有一个尾部斜杠:

http.Handle("/js/", http.FileServer(http.Dir("static/")))