Как настроить маршрут, чтобы обслуживать приложение activjs? - PullRequest
0 голосов
/ 24 апреля 2018

Я пытаюсь настроить маршрут для обслуживания моего реагирующего приложения.

У меня есть index.html и bundle.js в общей папке

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

Я использую go в качестве моего бэкэнд-API, а также для обслуживания моего реагирующего приложения.

Я создал подчиненный маршрут для своего приложения, например:

r := mux.NewRouter()

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

Таким образом, любой запрос с приложением в качестве субдомена будет для моего приложения 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)

1 Ответ

0 голосов
/ 24 апреля 2018

Вашему обработчику http нужен метод ServeHTTP.Если вы передадите свою функцию http.HandlerFunc, она будет представлена ​​для вас:

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

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

Тип HandlerFunc - это адаптер, позволяющий использовать обычные функции в качестве обработчиков HTTP.Если f - это функция с соответствующей подписью, HandlerFunc (f) - это обработчик, который вызывает f.

source

type HandlerFunc func(ResponseWriter, *Request)

// ServeHTTP calls f(w, r).
func (f HandlerFunc) ServeHTTP(w ResponseWriter, r *Request) {
    f(w, r)
}

Аналогично, вы могли быиспользуйте вместо этого мультимедийный маршрутизатор HandlerFunc:

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

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

По сути, оба шага выполняются за вас за один шаг.

...