我一直在使用Golang测试Google App Engine SDK,而且我在提供静态html页面时遇到问题。如果我在app.yaml
下的处理程序中添加内容很好但是在尝试从我的Go应用程序内部路由它时;尝试网址http://localhost:8080/tr
页面返回404。
我的文件系统设置为:
/main.go
/app.yaml
/testRoute.html
我的主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)
}
答案 0 :(得分:0)
我通过使用ServeFile方法修复了这个问题;这也适用于文件夹(例如“/assets/testRoute.html”)
func testRoute(w http.ResponseWriter, r *http.Request) {
http.ServeFile(w, r, "testRoute.html")
}
答案 1 :(得分:0)
您不应该使用Go处理程序来提供静态文件(除非您想要合并其他逻辑,例如高级日志记录或计数)。
您可以在应用的配置文件app.yaml
中定义静态文件处理程序。这在官方文档中有详细说明:Static file handlers
静态文件是指为给定URL直接提供给用户的文件,例如图像,CSS样式表或JavaScript源文件。静态文件处理程序描述应用程序目录中的哪些文件是静态文件,以及哪些URL为它们提供服务。
为了提高效率,App Engine与应用程序文件分开存储和提供静态文件。默认情况下,静态文件在应用程序的文件系统中不可用。可以将
来更改此设置application_readable
选项设置为true
。静态文件处理程序可以通过两种方式定义:作为映射到URL路径的静态文件的目录结构,或者作为将URL映射到特定文件的模式。
要让AppEngine自动提供静态文件,请将此条目添加到app.yaml
:
- url: /tr
static_files: testRoute.html
upload: testRoute.html
要自动提供静态文件的整个目录(包括子文件夹,递归),请将此条目添加到app.yaml
:
- url: /assets
static_dir: assets