【发布时间】: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