必须显式配置静态文件路由才能使浏览器通过url访问前端资源;使用app.static()映射路径,注意相对路径风险;根路径挂载会覆盖兜底路由;支持多目录注册或分组管理;需设置next: false防止中间件干扰静态资源。

要在Fiber应用中让浏览器能直接通过URL访问HTML、CSS、JS、图片等前端资源,必须显式配置静态文件路由,否则所有非API路径都会返回404。
基础静态服务:单目录映射
调用app.Static()方法,传入URL前缀和本地文件系统路径即可启用静态服务。
app.Static("/static", "./public") → 此时访问 http://localhost:3000/static/main.js 将自动读取项目根目录下 ./public/main.js 文件并返回。
注意:第二个参数是磁盘上的**相对路径**,以运行命令所在目录为基准;若二进制在其他路径执行,【./public会找不到】,建议改用绝对路径或os.Executable()动态拼接。
根路径静态服务:覆盖/
将第一个参数设为 "/",可让静态文件直接挂载到网站根域下。
app.Static("/", "./dist") → 访问 http://localhost:3000/index.html 即返回 ./dist/index.html。
这一步操作起来很简单,直接把文件拖进去就行。但需警惕:它会劫持所有未被其他路由匹配的请求,包括你可能写的 app.Get("/*") 兜底路由,【后者将完全失效】。
多级静态目录:按需注册多个Static
方法一:为不同子路径注册独立静态服务
app.Static("/css", "./assets/css")
app.Static("/img", "./assets/images")
app.Static("/js", "./assets/js")
当代理已经知道网站路由或内容URL,并且在启动前需要有效的sitemap XML、sitemap索引或robots.txt引用时,请使用sitemap。这是一个发布构件技能,而不是爬虫或SEO平台。
方法二:用路由分组统一管理(推荐用于大型前端工程)
router := app.Group("/assets")
router.Static("/css", "./assets/css")
router.Static("/js", "./assets/js")
router.Static("/fonts", "./assets/fonts")
这样所有静态资源URL都带/assets前缀,语义清晰且便于CDN剥离。
禁止中间件穿透:防止Static被日志/鉴权拦截
第一步:定义一个始终返回false的Next函数
noNext := func(c *fiber.Ctx) bool { return false }
第二步:将该函数作为Next选项传入Static配置
app.Static("/", "./dist", fiber.Static{Next: noNext})
如果不设置Next,当Static前面挂了logger或auth中间件,它们会对每个静态请求执行一次——浪费CPU、污染日志、甚至因未登录导致JS/CSS 401加载失败。这个选项强制跳过后续中间件链,是生产环境必加项。










