使用go-net/http mux为单页应用程序提供服务
我正在构建一个api,它也为我的react前端应用程序服务,但在服务index.html时遇到了一个问题 考虑到它不是一个真正的go模板,我不会使用html/模板 我并没有看到一种直接的方式来在路由中没有启动/api的所有页面上为我的应用程序的静态html根提供服务 我故意不使用gorilla的mux之外的任何go框架 我的handler.go:使用go-net/http mux为单页应用程序提供服务,http,go,reactjs,Http,Go,Reactjs,我正在构建一个api,它也为我的react前端应用程序服务,但在服务index.html时遇到了一个问题 考虑到它不是一个真正的go模板,我不会使用html/模板 我并没有看到一种直接的方式来在路由中没有启动/api的所有页面上为我的应用程序的静态html根提供服务 我故意不使用gorilla的mux之外的任何go框架 我的handler.go: func Index(w http.ResponseWriter, r *http.Request) { http.FileServer(ht
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,
},
}
路由器,开始
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文件提供服务:但是使用mux和更模块化的文件结构仍然可以生成一个漂亮、干净的空白页面。在handler.go中,您的索引函数实际上是一个no op,因为
http.FileServer()
返回一个处理程序,这是从来没有通过响应作者或请求,因此空白页。< /P>
也许尝试一下这样的方法至少可以克服这个问题:
func Index(w http.ResponseWriter, r *http.Request) {
http.FileServer(http.Dir("./views")).ServeHTTP(w, r)
}
答对了,我在想这可能与回应者缺乏行动有关。不幸的是,该文件夹中的其他静态文件(css和js)无法通过。我认为这是因为路由模式非常具体。如果您按名称调用index.html,则即使是index.html也不会返回,只会将其命名为“/”。可能是“/{file}”而不是“/”,这取决于它与您拥有的其他路由的交互方式(尽管您可能不希望从根路径提供所有静态内容)。实际上,我是从/dist(而不是上面看到的/views)文件夹提供服务的/{file}也得到了一个404。我在路由器`` router.PathPrefix(“/”).Handler(http.FileServer(http.Dir(“./dist”))))``中添加了一个PathPrefix,现在我的其他文件都被保存了。你想用Go来提供静态内容有什么特别的原因吗?您可以将nginx设置为提供静态内容,并将其他内容转发给您的Go程序。我没有使用nginx的经验,我知道使用Go是可行的:)