我正在尝试设置一条路线来为我的reactjs应用程序提供服务。
我在公共文件夹中有我的index.html和bundle.js
/public/index.html
/public/bundle.js
我使用go作为我的后端API,并且还为我的reactjs应用程序提供服务。
我为我的应用创建了一个子路由,如:
r := mux.NewRouter()
app := r.Host("app.example.com").Subrouter()
因此,任何以app为子域名的请求都将用于我的Reactjs应用程序。
所以现在我必须为每个请求提供服务,无论我的reactjs应用程序的URL是什么。
路径前缀是我需要的吗?
我试过了:
app.PathPrefix("/").Handler(serveReact)
func serveReact(w http.ResponseWriter, r *http.Request) {
}
但是我收到了这个错误:
不能使用serveReact(类型为func()http.Handler)作为http.Handler类型 在app.PathPrefix(" /")的参数中。处理程序:func()http.Handler做 没有实现http.Handler(缺少ServeHTTP方法)
答案 0 :(得分:2)
您的http处理程序需要ServeHTTP
方法。如果您将函数传递给http.HandlerFunc
,那么将为您介绍:
app.PathPrefix("/").Handler(http.HandlerFunc(serveReact))
func serveReact(w http.ResponseWriter, r *http.Request) {
}
HandlerFunc类型是一个允许将普通函数用作HTTP处理程序的适配器。如果f是具有适当签名的函数,则HandlerFunc(f)是一个调用f。
的Handler
type HandlerFunc func(ResponseWriter, *Request)
// ServeHTTP calls f(w, r).
func (f HandlerFunc) ServeHTTP(w ResponseWriter, r *Request) {
f(w, r)
}
同样,您可以改为使用mux路由器HandlerFunc
:
app.PathPrefix("/").HandlerFunc(serveReact)
func serveReact(w http.ResponseWriter, r *http.Request) {
}
这基本上只需一步完成两个步骤。