Javascript golang模板中的Src属性

Javascript golang模板中的Src属性,javascript,html,web,go,Javascript,Html,Web,Go,在golang服务器上执行模板时,我遇到一个问题,html文件中的src属性搜索导入的javascript文件不在根位置(服务器文件夹),而是在已处理的url下面。因此,请求src='/dir/file.js'具有当前位置,如http://localhost:8080/handled/将对http://localhost:8080/handled/dir/file.js package main import ("net/http"; "html/template") var templat

在golang服务器上执行模板时,我遇到一个问题,html文件中的src属性搜索导入的javascript文件不在根位置(服务器文件夹),而是在已处理的url下面。因此,请求
src='/dir/file.js'
具有当前位置,如
http://localhost:8080/handled/
将对
http://localhost:8080/handled/dir/file.js

package main

import ("net/http"; "html/template")

var templates = template.Must(template.ParseFiles("././dir/file.html"))

type Page struct {
  Title string
  Body  []byte
}

func testHandler(w http.ResponseWriter, r *http.Request) {
  page := Page{"handled", nil}

  err := templates.ExecuteTemplate(w, "file.html", p)
  if err != nil {
    http.Error(w, err.Error(), http.StatusInternalServerError)
  }
}

func main() {
  http.HandleFunc("/handled/", testHandler)
  http.ListenAndServe(":8080", nil)
}
因此,template file.html包含以下行:

<!-- file.html
javascript placed right inside template file is working,
but I didnt managed to get to work src insertation -->
<script src="file.js"></script>

…file.js与file.html共享同一目录。
我尝试了不同的文件位置和不同的路径组合。似乎我做得不对。

如果您的浏览器正在请求/handled/dir/file.js,那么您的src肯定缺少初始正斜杠。这不是一个具体的问题


我看到您说您所请求的文件具有src=“/dir/file.js”,但在您的示例中,您显示了src=“file.js”,因此我不确定您真正拥有什么。但是,您的问题仍然表明忘记了第一个斜杠,比如src=“dir/file.js”

路径中没有正斜杠。所以,请求的文件必须在本地搜索,不是吗?似乎没有,这就是为什么我贴了一个问题。我在上面添加它的原因是为了显示GET请求是在处理过的url下面发送的。就是这样。如果没有正斜杠,那么请求路径是相对的。您需要使用src=“../dir/file.js”使其正确相对,使用src=“/dir/file.js”使其绝对,或者您需要设置html
base
tag()以设置base,并将其保留为通过相对路径插入的JavaScript实际上会导致浏览器控制台中显示的“语法错误”。但是脚本只包含“警报(“测试!”);”。当我查看错误消息信息时,它只显示带有src attr的脚本标记。如上所述,这两个文件都位于同一个目录中,所以我不会被include路径弄得一团糟(也尝试了几十种变体,甚至是绝对的)。请参阅我对您的问题的评论。仅仅因为
file.js
file.html
(html/模板模板)位于同一目录中,并不意味着它是“可访问的”。只有模板被
template.ParseFiles
解析。从发布的代码来看,哪个HTTP服务器在为
file.js?
提供服务,没有
HTTP.FileServer
为模板文件所在目录下的静态内容(js、CSS等)提供服务。如果是这种情况,那么路径的任何变化都不会修复它:静态内容不会“隐式”提供,因为它与模板文件位于同一目录中。(对于将来的参考,前导斜杠是最好的方法-不惜一切代价避免相对URL)。谢谢!我试试看。我是如此的跛脚;)