我正在编写一个Go应用程序,它在两个不同的目录中提供文件。
我的项目结构:
PROJECT_DIR
PROJECT_DIR/config
PROJECT_DIR/src
PROJECT_DIR/client
PROJECT_DIR/client/node_modules
PROJECT_DIR/client/www
在我的主go文件中,我使用以下代码启动文件服务器:
func main() {
log.Print("started web server...");
httpsPortStr := ":" + strconv.FormatUint(config.CfgIni.HttpsPort, 10)
log.Printf("starting https web server at port %v", config.CfgIni.HttpsPort)
http.Handle("/", http.FileServer(http.Dir("client/www")))
http.Handle("/node_modules",http.FileServer(http.Dir(("client/node_modules"))))
err := http.ListenAndServeTLS(httpsPortStr, config.CfgIni.CertificateFile, config.CfgIni.PrivateKeyFile, nil)
if err != nil {
log.Fatalf("https server stopped with the following error: %v", err)
} else {
log.Print("https server stopped with no error")
}
}
如您所见,我将/
映射到client / www和/node_modules
映射到client / node_modules。
当我尝试访问客户端/ www上的文件时,例如https://host:port/test.html,它效果很好!
当我尝试访问client / node_modules上的文件时,例如:https://host:port/node_modules/test.html,我找不到404页面。
test.html文件存在于两个位置且可读(无权限问题)。
我可能会以某种方式错误地配置路由。
任何想法?
谢谢!
答案 0 :(得分:0)
FileServer正在尝试将路径(例如/ node_modules / ...)路由到文件“client / node_modules / node_modules /..."
所以请使用StripPrefix,例如:
http.Handle("/node_modules", http.StripPrefix("/node_modules", http.FileServer(http.Dir(("client/node_modules")))))
在此处查看另一个answer。