【问题标题】:Serve static files with golang使用 golang 提供静态文件
【发布时间】:2019-01-09 05:13:23
【问题描述】:

我正在尝试开发一个简单的 Web 应用程序,但在提供静态文件时遇到了问题。

文件结构为:

  • 主要

--main.go

-服务

--listenAndServe.go

--模板

---login.html

---资产

----css

----字体

----js

我的代码是这样的:

    import (
        "log"
        "net/http"
        "time"

        "github.com/gorilla/mux"
    )

    var (
        router = mux.NewRouter()
    )

    func (c *Conn) ListenAndServe() {
        fs := http.FileServer(http.Dir("./templates/assets"))
        http.Handle("/assets/", http.StripPrefix("/assets/", fs))
        router.HandleFunc("/", c.IndexPageHandler)
        router.HandleFunc("/login.html", c.LoginPageHandler)
        log.Println("Listening...")
        http.Handle("/", router)
        muxWithMiddlewares := http.TimeoutHandler(router, time.Minute*30, 
        "Timeout!")
         http.ListenAndServe(":8080", muxWithMiddlewares)
      }

但由于某种原因,当我从 main.go 运行它时,它服务于 html 而不是资产。我真的很感激一些提示。谢谢!

【问题讨论】:

  • 服务器对您的资产响应什么(状态)?
  • http.Handle("/assets/", http.StripPrefix("/assets/", fs))http.ListenAndServe(":8080", muxWithMiddlewares) 不兼容。第一个说“让 default ServeMux 处理资产”,第二个说“使用 non-default muxWithMiddlewares 处理程序启动服务器”。使用默认多路复用器或大猩猩多路复用器,但不能同时使用。
  • 它实际上并没有响应任何错误。它只是不为他们服务。 HTML 服务很好
  • 感谢您澄清@mkopriva!我正在努力解决这个问题
  • 尝试删除StripPrefix 的最后一个斜线,这样你就有了http.Handle("/assets/", http.StripPrefix("/assets", fs))(或者在修复@mkopriva 提到的东西之后你拥有的任何东西)。我想我有类似的问题 FileServer 不喜欢没有前导斜线

标签: go server static-libraries gorilla


【解决方案1】:

试试这个:

mux.Handle("/static/", http.StripPrefix("/static", fileServer))

请注意,在您的情况下,静态资产在 stripPreFix 函数中只有一个正斜杠。

希望这会有所帮助。

【讨论】: