我正在构建一个api,它也可以为我的反应前端应用程序提供服务,但是我的index.html服务有问题
鉴于它不是真正的模板,我不使用html / template。
我没有看到在所有未在路线中启动/ api的网页上提供应用程序的静态html根目录的正确方法。
我故意试图不使用超出gorilla的mux的任何go框架
我的handler.go:
func Index(w http.ResponseWriter, r *http.Request) {
http.FileServer(http.Dir("./views"))
}
Routes.go:
type Route struct {
Name string
Method string
Pattern string
HandlerFunc http.HandlerFunc
}
type Routes []Route
var routes = Routes{
Route{
"Index",
"GET",
"/",
Index,
},
}
router.go
import (
"net/http"
"github.com/gorilla/mux"
)
func NewRouter() *mux.Router {
router := mux.NewRouter().StrictSlash(true)
for _, route := range routes {
var handler http.Handler
handler = route.HandlerFunc
handler = Logger(handler, route.Name)
router.
Methods(route.Method).
Path(route.Pattern).
Name(route.Name).
Handler(handler)
}
return router
}
主要:
package main
import (
"./server"
"log"
"net/http"
)
func main() {
router := server.NewRouter()
log.Fatal(http.ListenAndServe(":8080", router))
}
目前显示空白页面,就是这样。我的index.html位于/views/index.html
与可执行文件相关(但我也尝试过与处理程序有关)
更新
我能够使用此问题中显示的方法来提供html文件:How do you serve a static html file using a go web server?但是,使用mux和更模块化的文件结构仍会产生漂亮漂亮的空白页。
答案 0 :(得分:1)
在handler.go中,你的Index函数实际上是一个无操作,因为http.FileServer()
返回一个Handler,它永远不会传递给ResponseWriter或Request,因此就是空白页。
也许尝试这样的事情至少要过去:
func Index(w http.ResponseWriter, r *http.Request) {
http.FileServer(http.Dir("./views")).ServeHTTP(w, r)
}