我一直在使用Golang测试Google App Engine SDK,但在投放静态html页面时遇到问题。如果我在app.yamlunder处理程序中添加了内容,那很好,但是当尝试从我的Go应用程序内部进行路由时;尝试网址时http://localhost:8080/tr,页面返回404。
app.yaml
http://localhost:8080/tr
我的文件系统设置为:
/main.go /app.yaml /testRoute.html
我的主要app.go样子是这样的:
app.go
import ( "fmt" "net/http" "github.com/gorilla/mux" ) func init() { r := mux.NewRouter() r.HandleFunc("/", index) r.HandleFunc("/tr", testRoute) http.Handle("/", r) } func index(w http.ResponseWriter, r *http.Request) { //No Issues here fmt.Fprint(w, "Main Index.") } func testRoute(w http.ResponseWriter, r *http.Request) { http.FileServer(http.Dir("testRoute.html")).ServeHTTP(w, r) }
您不应该使用Go处理程序来提供静态文件(除非您希望合并其他逻辑,例如高级日志记录或计数)。
您可以在应用程序的配置文件中定义静态文件处理程序app.yaml。官方文档中对此进行了详细说明: 静态文件处理程序
静态文件是针对给定URL直接提供给用户的文件,例如图像,CSS样式表或JavaScript源文件。静态文件处理程序描述应用程序目录中的哪些文件是静态文件,以及由哪些URL服务。 为了提高效率,App Engine与应用程序文件分开存储和提供静态文件。默认情况下,静态文件在应用程序的文件系统中不可用。可以通过将application_readable选项设置为来更改true。 可以通过两种方式定义静态文件处理程序:作为映射到URL路径的静态文件的目录结构,或作为将URL映射到特定文件的模式。
静态文件是针对给定URL直接提供给用户的文件,例如图像,CSS样式表或JavaScript源文件。静态文件处理程序描述应用程序目录中的哪些文件是静态文件,以及由哪些URL服务。
为了提高效率,App Engine与应用程序文件分开存储和提供静态文件。默认情况下,静态文件在应用程序的文件系统中不可用。可以通过将application_readable选项设置为来更改true。
application_readable
true
可以通过两种方式定义静态文件处理程序:作为映射到URL路径的静态文件的目录结构,或作为将URL映射到特定文件的模式。
要使AppEngine自动提供静态文件,请将此条目添加到您的中app.yaml:
- url: /tr static_files: testRoute.html upload: testRoute.html
要使静态文件(包括递归子文件夹)的整个目录自动提供,请将此条目添加到app.yaml:
- url: /assets static_dir: assets