一尘不染

如何在Go中投放CSS和JS

go

我遵循了Go Writing Web
Applications
教程,但是无论出于什么原因,我都很难使该应用程序能够服务CSS和JS。如果我在没有Go服务器的情况下运行静态页面,则页面CSS可以正常工作。另一方面,当我运行Go服务器时,CSS无效。

这是我的HTML外观:

<link rel="stylesheet" href="../assets/css/bootstrap.min.css">
<link rel="stylesheet" href="../assets/css/bootstrap-theme.min.css">
<link rel="stylesheet" href="../assets/css/custom.css">

然后在body标记下:

<script src="../assets/js/jquery.min.js"></script>
<script src="../assets/js/bootstrap.min.js"></script>

我的文件树如下所示:

go-affect/
├── data
│   └── …
├── static
│   ├── css
│   │   └── …
│   └── js
│   │   └── …
├── tmpl
│   ├── edit.html
│   ├── index.html
│   └── view.html
└── main.go

如何获得Go应用程序以提供所需的CSS和JavaScript?

此问题已经解决,这里是主要的工作方式:

func main() {
    http.HandleFunc("/view/", makeHandler(viewHandler))
    http.HandleFunc("/edit/", makeHandler(editHandler))
    http.HandleFunc("/save/", makeHandler(saveHandler))
    http.HandleFunc("/index/", makeHandler(indexHandler))


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

    http.ListenAndServe(":8080", nil)
}

这是我使用的处理程序的示例:

func indexHandler(w http.ResponseWriter, r *http.Request, title string) {
    p := &Page{Title: title}
    err := templates.ExecuteTemplate(w, "index.html", p)
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
    }
}

阅读 357

收藏
2020-07-02

共1个答案

一尘不染

http.Handle("/", http.FileServer(http.Dir("css/")))

将在提供您的css目录/。当然,您可以在任意路径下为任何目录提供服务。

您可能要确保静态路径不会妨碍其他路径,并使用类似的方法。

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

js和都放置在项目css的目录static中。那么这将在为他们提供服务domain.com/static/css/filename.cssdomain.com/static/js/filename.js

StripPrefix方法删除了前缀,因此它不会尝试在当然找不到的static目录中进行搜索static/css/filename.css。它将css/filename.cssstatic目录中查找,这是正确的。

2020-07-02