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

时间:2014-12-23 20:42:04

标签: go

初学者问题

我有这个目录结构。

app_executable
html
 |
  - index.html
data
 |
  - static_file.json

我无法在static_file.json中投放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 个答案:

答案 0 :(得分:1)

问题是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"}

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

相关问题