猿问

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

初学者围棋问题


我有这个目录结构。


app_executable

html

 |

  - index.html

data

 |

  - 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))

}

任何帮助表示赞赏!


LEATH
浏览 243回答 1
1回答

Smart猫小萌

问题在于 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
随时随地看视频慕课网APP

相关分类

Go
我要回答