首页 > 解决方案 > 在 HTTP 服务器中提供静态文件

问题描述

我正在使用 golang 作为中型 Web 应用程序的后端,该应用程序在不同的文件夹中有几个页面和大量 CSS 和 javascript,我正在尝试使用 golang 为网站提供服务,但只加载索引文件,另一个页面、javascript、CSS 不加载。因为我的 HTML 文件彼此不同,所以我没有使用模板

这是文件结构

-static 
    -assets
        -css(folder with subfolders)
        -js(folder with subfolders)
    -pages (folder with differnt html pages)
         -signup.html
         -dashboard.html
    -index.html
    -register_bundle.js
-main.go
func handlerequests (){
 myRouter := mux.NewRouter().StrictSlash(true)
 myRouter.Handle("/", http.FileServer(http.Dir("./static")))
 myRouter.HandleFunc("/transaction", transactionHandler)
 log.Fatal(http.ListenAndServe(":8080",myRouter))
}

我的 HTML 文件有这样的链接,(显示 index.html)

<!-- CSS Files -->
  <link href="./assets/css/bootstrap.min.css" rel="stylesheet" />
  <link href="./assets/css/paper-dashboard.css?v=2.1.1" rel="stylesheet" />
<!--JS files -->
  <script src="./assets/demo/demo.js"></script>
  <!--Main Script file for the page  -->
  <script src="./register_bundle.js"></script>

此处显示的错误

在此处输入图像描述

在此处输入图像描述

标签: httpgoserverassets

解决方案


问题是浏览器找不到那些 JS 和 CSS 文件。

    fs := http.FileServer(http.Dir("./static"))
    MUXRouter.Handle("/", fs)
    MUXRouter.PathPrefix("/assets/").Handler(fs)
    MUXRouter.PathPrefix("/pages/").Handler(fs)
    MUXRouter.Handle("/register_bundle.js", fs)

这样一个 GET 请求http://[host]:[port]/css/style.css将从相关./static/css/目录返回 style.css。上面的代码在我的示例程序中运行。


推荐阅读