CSS 未在 Go 服务器中呈现

分享于2022年07月17日 css go html localhost server 问答
【问题标题】:CSS 未在 Go 服务器中呈现(CSS not rendered in Go server)
【发布时间】:2022-02-04 06:41:42
【问题描述】:

我使用 chi 作为路由器。 我的文件树是:

 -cmd
     - web
          - main.go and some other go files here*
          - static
                - assets
                - some html files here*

我的路线设置如下:

mux := chi.NewRouter()

mux.Use(middleware.Logger)
mux.Use(middleware.SetHeader("Cache-Control", "no-store"))

mux.Get("/about", app.serveFile)
mux.Get("/login", app.serveFile)
mux.Get("/register", app.serveFile)
mux.Get("/", app.serveFile)

fileServer := http.FileServer(http.Dir("./cmd/web/static/assets/"))
    mux.Handle("/assets/", http.StripPrefix("/assets/", fileServer))

这是我的 index.html 文件的 sn-p:

 
 

编辑 1: 我使用 make 作为我的构建工具。以下是构建和运行网络的规则:

build_web:
    @echo "building projectName web..."
    @go build -o ${BINARY_DIR}/${WEB_BINARY_NAME} ./cmd/web/*.go
    @echo "projectName web built"

run_web:
    @echo "running projectName web..."
    @./${BINARY_DIR}/${WEB_BINARY_NAME} -environment ${PREF_ENV} -port ${WEB_PORT}

在 localhost 上运行服务器,呈现 HTML 页面但不应用 css 规则。我检查了开发人员工具的网络选项卡,它显示所有资产(css/js/images)的状态代码 200。同样通过中间件记录器报告,资产文件夹中所有文件的状态码为 200。 我已经尝试了所有可以偶然发现的 stackoverflow 答案,但仍然没有运气。

  • 如果你这样做 curl <your_host>/assets/css/style.css 会得到什么?
  • ...或者你在浏览器地址栏输入 /assets/css/style.css,在浏览器中看到了什么?
  • @Ercross 你在哪个目录运行进程?我问是因为您使用的是相对的 http.Dir。进程的工作目录是 ./cmd 的父目录吗?如果不是,那将是您的问题。
  • @Ercross 在 fileServer := ... 行的正上方执行 fmt.Println(os.Getwd()) 以确认您是否在 ./cmd 父目录中。
  • @Ercross 您可以尝试的另一件事是: http.StripPrefix("/assets", fileServer) (不带斜杠的前缀)?我真的不认为这会解决您的问题,但尝试一下不会有什么坏处。

【解决方案1】:

我最终是如何解决这个问题的: 我在浏览器中输入了 <address>/assets/css/style.css ,它返回了 404 not found 页面。 虽然它在服务器日志中显示状态代码 200,但实际上并未提供该文件。所以我将我的文件服务器上的路径从 /assets/ 更改为 /assets/* (这里: mux.Handle("/assets/*", http.StripPrefix("/assets/", fileServer)) )并且它起作用了, 感谢 @bayta-darrel 和 @mkopriva 的帮助