javascript - golang 在呈现模板时包含 javascript 文件

标签 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 更改为“app.js”,但仍然给出相同的错误消息。

这让我认为这是由于服务器呈现文件的方式(使用 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 header 是:

<!DOCTYPE html>
<html>
<head>
<title>Chat Example</title>    
</script>
<script src="static/app.js" type= "text/javascript"></script>

我觉得必须有一种更简单的方法来加载 JS。这是尝试 2,其中包含我尝试过的更多解释、代码和示例。

最佳答案

您必须在 HTML 中引用脚本:

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

另请注意,为了提供整个目录,在 mux 中注册的路径应该有一个尾部斜杠:

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

关于javascript - golang 在呈现模板时包含 javascript 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50118831/

相关文章:

algorithm - Go lang : search x digits from sets of numbers, 为什么需要很长时间才能执行?

javascript - 我应该如何检测IE浏览器?

javascript - 为什么在 javascript 中设置 ImageButton 的 ImageUrl 不起作用?

javascript - 在 Meteor TODO 应用程序中添加另一个字段以形成表单?

javascript - HTML5 - Chrome 44 - flexbox 中的文本未正确对齐

mongodb - 从 Go 连接到远程 Linux MongoDb(无身份验证)

javascript - 编辑时验证表中的单元格

html - 无法从 html/template Golang 访问数据

http.Handle(Handler 或 HandlerFunc)

go - 将指针作为接口(interface)类型传递