You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Chi Router的Go Web应用无法提供静态文件服务求助

解决Chi Router静态文件服务404问题

你遇到的核心问题是:当请求/assets/style.css这类路径时,http.FileServer会收到完整的/assets/style.css路径,然后去./assets目录下找assets/style.css文件——显然这个路径不存在,所以返回404。

修正方案

需要用http.StripPrefix把请求路径中的/assets/前缀去掉,再传给文件服务器,让它直接在assets目录下查找对应的文件。修改后的代码如下:

import (
    "net/http"
    "github.com/go-chi/chi/v5"
    // 如果你用绝对路径的话,还要引入path/filepath和log
    // "path/filepath"
    // "log"
)

func main() {
    router := chi.NewRouter()

    router.Get("/", indexHandler)
    router.Get("/showExternalProfile", showExternalProfileHandler)

    router.Post("/project_request", projectRequestHandler)
    router.Post("/downloadExternalProfile", downloadExternalProfileHandler)
    router.Post("/aigenerateProfile", aibeautifyHandler)
    router.Post("/project_clear", clearHandler)

    // 关键修正:用StripPrefix去掉/assets/前缀
    router.Handle("/assets/*", http.StripPrefix("/assets/", http.FileServer(http.Dir("./assets"))))

    // 可选:用绝对路径避免工作目录问题
    // assetsDir, err := filepath.Abs("./assets")
    // if err != nil {
    //     log.Fatal(err)
    // }
    // router.Handle("/assets/*", http.StripPrefix("/assets/", http.FileServer(http.Dir(assetsDir))))

    http.ListenAndServe(":8000", router)
}

额外说明

  • 如果你是在项目根目录运行程序(比如go run cmd/main.go),./assets的相对路径是正确的;但如果是进入cmd目录运行(cd cmd && go run main.go),则需要把http.Dir的参数改成../assets。
  • 用绝对路径的方式(注释里的代码)可以彻底避免工作目录带来的问题,推荐在生产环境使用。

内容的提问来源于stack exchange,提问作者Sebi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 05:07:04