【发布时间】: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:
<link rel="shortcut icon" href="/assets/images/favicon.png" type="image/x-icon">
<link rel="stylesheet" href="/assets/css/style.css">
编辑 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)(不带斜杠的前缀)?我真的不认为这会解决您的问题,但尝试一下不会有什么坏处。
标签: html css go server localhost