为了账号安全,请及时绑定邮箱和手机立即绑定

当文件存在时,http.FileServer 总是 404

当文件存在时,http.FileServer 总是 404

Go
LEATH 2021-09-10 15:15:23
初学者围棋问题我有这个目录结构。app_executablehtml |  - index.htmldata |  - static_file.json我无法让它为static_file.jsonin服务data/static_file.json。func main() {  // this works and serves html/index.html  html := http.FileServer(http.Dir("html"))  http.Handle("/", html)  // this always 404's  data := http.FileServer(http.Dir("data"))  http.Handle("/data/", data)  fmt.Println("Listening on port " + port + "...")  log.Fatal(http.ListenAndServe(port, nil))}任何帮助表示赞赏!
查看完整描述

1 回答

?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

问题在于 FileServer 处理程序实际上正在此路径上查找文件:


./data/data/static_file.json

代替


./data/statif_file.json

如果您使第一个文件存在,您的代码将起作用。您可能想要做的是:


data := http.FileServer(http.Dir("data"))

http.Handle("/", data)

或者


data := http.FileServer(http.Dir("data"))

http.Handle("/data/", http.StripPrefix("/data/", data))

我会选择前者,因为这可能是您真正想要做的。将处理程序附加到根目录,任何匹配 /data/ 的内容都将按预期返回。


如果您查看从调用中实际返回的内容


data := http.FileServer(http.Dir("data"))

你会看到它是


&http.fileHandler{root:"data"}

这就是说根位于 ./data,因此请尝试在该根下查找与请求路径匹配的文件。在你的情况下,路径是 data/static_file.json 所以最终它会检查不存在的 ./data/data/static_file.json 并且它是 404s


查看完整回答
反对 回复 2021-09-10
  • 1 回答
  • 0 关注
  • 238 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信