首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当文件存在时,http.FileServer总是404。

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

Stack Overflow用户
提问于 2014-12-23 20:42:04
回答 1查看 353关注 0票数 1

初学者围棋问题

我有这个目录结构。

代码语言:javascript
复制
app_executable
html
 |
  - index.html
data
 |
  - static_file.json

我无法让它服务于static_file.json in data/static_file.json

代码语言:javascript
复制
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))
}

任何帮助都是非常感谢的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-23 20:59:38

问题是,FileServer处理程序实际上是在此路径上查找一个文件:

代码语言:javascript
复制
./data/data/static_file.json

而不是

代码语言:javascript
复制
./data/statif_file.json

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

代码语言:javascript
复制
data := http.FileServer(http.Dir("data"))
http.Handle("/", data)

代码语言:javascript
复制
data := http.FileServer(http.Dir("data"))
http.Handle("/data/", http.StripPrefix("/data/", data))

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

如果您查看从

代码语言:javascript
复制
data := http.FileServer(http.Dir("data"))

你会发现它是

代码语言:javascript
复制
&http.fileHandler{root:"data"}

它表示根位于./data,因此尝试在该根下找到一个与请求路径匹配的文件。在您的例子中,路径是data/staticfile.json,所以它最终会检查./data/data/staticfile.json(不存在)和404 s。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27627702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档