为什么我的golang模板不选择外部javascript文件?

为什么我的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

我从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 *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更让人困惑的了