为什么我的golang模板不选择外部javascript文件?
我从stack overflow中尝试了很多建议,但似乎都不起作用。我无法选择外部js文件 我的主要职能是:为什么我的golang模板不选择外部javascript文件?,go,Go,我从stack overflow中尝试了很多建议,但似乎都不起作用。我无法选择外部js文件 我的主要职能是: package main import( "encoding/json" "net/http" "fmt" "github.com/gorilla/mux" "github.com/rs/cors" "text/template" ) func GetPeopleEndpoint(w http.ResponseWriter, req
package main
import(
"encoding/json"
"net/http"
"fmt"
"github.com/gorilla/mux"
"github.com/rs/cors"
"text/template"
)
func GetPeopleEndpoint(w http.ResponseWriter, req *http.Request) {
w.Header().Set("Content-Type", "text/html")
t, _ := template.ParseFiles("index2.html")
t.Execute(w, nil)
}
func main() {
router := mux.NewRouter()
people = append(people, Person{ID: "1", Firstname: "Nic", Lastname: "Raboy", Address: &Address{City: "Dublin", State: "CA"}})
people = append(people, Person{ID: "2", Firstname: "Maria", Lastname: "Raboy"})
fmt.Println(people)
router.Handle("/files/", http.StripPrefix("/files/", http.FileServer(http.Dir("."))))
router.HandleFunc("/people", GetPeopleEndpoint)
c := cors.New(cors.Options{
AllowedOrigins: []string{"http://localhost:3000"},
AllowCredentials: true,
})
// Insert the middleware
handler := c.Handler(router)
// handler := cors.Default().Handler(router)
http.ListenAndServe(":12345", handler)
}
我的所有文件都在同一个目录中
这是我的html:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
This is page2
<div id='newdiv'>
</div>
</body>
<script type="text/javascript" src="app2.js">
</script>
</html>
这是第二页
我得到的错误是“得到”。我不知道我在哪里犯了错误。假设您有目录结构:
<src-dir>
static
templates
...
将此行更新为-
<script type="text/javascript" src="/static/app2.js"></script>
现在您可以通过
http://localhost:12345/static/app2.js
假设您有目录结构:
<src-dir>
static
templates
...
将此行更新为-
<script type="text/javascript" src="/static/app2.js"></script>
现在您可以通过http://localhost:12345/static/app2.js
此行:
router.Handle("/files/", http.StripPrefix("/files/", http.FileServer(http.Dir("."))))
意味着“/files/”下URL的请求将从当前目录中磁盘上的文件中发出,并且“/files/”前缀将被删除。
因此,如果您希望当前目录中有一个名为app2.js
的文件,那么URL必须是/files/app2.js
router.Handle
定义处理给定路径的处理程序。在本例中,该路径是/files/
。由于后面的斜杠,以/files/
开头的所有URL都将使用相同的处理程序
http.StripPrefix
是一个处理程序包装器。它接受传入的请求,去掉给定的前缀(在本例中为/files/
),将其从URL路径中删除,然后将请求传递给传递给StripPrefix
的处理程序
http.FileServer
提供来自http.FileSystem
的文件,在本例中由http.Dir
提供http.Dir
公开目录中的文件,在本例中是当前工作目录(“
)
因此,总的来说:以/files/
开头的请求将删除/files/
部分,然后不管剩下什么,都将在当前工作目录中查找该文件路径,如果找到,将提供服务。因此,/files/app2.js
将提供/app2.js
。您的HTML必须引用/files/app2.js
,而不是app.js
此行:
router.Handle("/files/", http.StripPrefix("/files/", http.FileServer(http.Dir("."))))
意味着“/files/”下URL的请求将从当前目录中磁盘上的文件中发出,并且“/files/”前缀将被删除。
因此,如果您希望当前目录中有一个名为app2.js
的文件,那么URL必须是/files/app2.js
router.Handle
定义处理给定路径的处理程序。在本例中,该路径是/files/
。由于后面的斜杠,以/files/
开头的所有URL都将使用相同的处理程序
http.StripPrefix
是一个处理程序包装器。它接受传入的请求,去掉给定的前缀(在本例中为/files/
),将其从URL路径中删除,然后将请求传递给传递给StripPrefix
的处理程序
http.FileServer
提供来自http.FileSystem
的文件,在本例中由http.Dir
提供http.Dir
公开目录中的文件,在本例中是当前工作目录(“
)
因此,总的来说:以
/files/
开头的请求将删除/files/
部分,然后不管剩下什么,都将在当前工作目录中查找该文件路径,如果找到,将提供服务。因此,/files/app2.js
将提供/app2.js
。您的HTML必须引用/files/app2.js
,而不是app.js
编写http.FileServer(http.Dir(“.”)通常是个坏主意,因为它不仅会公开您的.js文件,还会公开您的.go文件,使您的代码通过http请求可见。例如,将使浏览器以文本形式交付源代码
最佳实践应该是将静态文件(js、css、html…)收集在单独的目录中,或者只收集在一个目录中,例如“资源”包
然后试试
http.Handle("/files/", http.StripPrefix("/files/", http.FileServer(http.Dir("resources"))))
此代码将完成这项工作,并允许您使用url前缀/files
访问/resources
下的所有文件。例如:
http://localhost:12345/files/app2.js
编写http.FileServer(http.Dir(“.”)
通常是个坏主意,因为它不仅会公开.js文件,还会公开.go文件,使代码通过http请求可见。例如,将使浏览器以文本形式交付源代码
最佳实践应该是将静态文件(js、css、html…)收集在单独的目录中,或者只收集在一个目录中,例如“资源”包
然后试试
http.Handle("/files/", http.StripPrefix("/files/", http.FileServer(http.Dir("resources"))))
此代码将完成这项工作,并允许您使用url前缀/files
访问/resources
下的所有文件。例如:
http://localhost:12345/files/app2.js
“GET”不是错误,而是HTTP请求。实际的错误是什么?404找不到?您还将磁盘上的文件路由定义为/files/
,但您在HTML中的引用中没有使用该路由;也许src=“app2.js”
应该是src=“files/app2.js”
?@Adrian没有什么比404更容易引起混淆的了。是什么导致了错误?网络浏览器?@Adrain网络浏览器。app2.js位于当前目录中。我给出了文件的完整路径,但仍然不起作用。“GET”不是错误,而是HTTP请求。实际的错误是什么?404找不到?您还将磁盘上的文件路由定义为/files/
,但您在HTML中的引用中没有使用该路由;也许src=“app2.js”
应该是src=“files/app2.js”
?@Adrian没有什么比404更让人困惑的了