如何设置服务 reactjs 应用程序的路由?

How to set up a route to serve reactjs app?

我正在尝试设置一个路由来为我的 reactjs 应用程序提供服务。

我的 index.html 和 bundle.js 在 public 文件夹中

/public/index.html
/public/bundle.js

我使用 go 作为我的后端 API,同时也为我的 reactjs 应用提供服务。

我为我的应用程序创建了一个子路径,例如:

r := mux.NewRouter()

app := r.Host("app.example.com").Subrouter()

因此,任何以应用程序作为子域的请求都将用于我的 Reactjs 应用程序。

所以现在我必须为每个请求提供服务,而不管 URL 到我的 reactjs 应用程序。

这里是我需要的路径前缀吗?

我试过这个:

app.PathPrefix("/").Handler(serveReact)

func serveReact(w http.ResponseWriter, r *http.Request) {
}

但是我得到这个错误:

cannot use serveReact (type func() http.Handler) as type http.Handler in argument to app.PathPrefix("/").Handler: func() http.Handler does not implement http.Handler (missing ServeHTTP method)

您的 http 处理程序需要一个 ServeHTTP 方法。如果你将你的函数传递给http.HandlerFunc,将为你介绍:

app.PathPrefix("/").Handler(http.HandlerFunc(serveReact))

func serveReact(w http.ResponseWriter, r *http.Request) {
}

The HandlerFunc type is an adapter to allow the use of ordinary functions as HTTP handlers. If f is a function with the appropriate signature, HandlerFunc(f) is a Handler that calls f.

source

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) {
}

这实际上是在一个组合步骤中为您执行这两个步骤。