Как обслуживать React - PullRequest
       43

Как обслуживать React

4 голосов
/ 25 сентября 2019

У меня есть простое приложение React, которое я хотел бы обслуживать с моего сервера Go.Я слышал, что процесс похож на обслуживание статического html-файла, но я просто не могу заставить его работать.

Когда я пытаюсь просмотреть приложение в браузере, он говорит: «Эта страница неработает "и что" localhost перенаправил слишком много раз "

Вот код, где я запускаю сервер локально, а также пытаюсь обработать приложение реагирования

func main() {

r := mux.NewRouter()

// handle app
buildHandler := http.FileServer(http.Dir("./client/build/index.html"))
r.PathPrefix("/").Handler(buildHandler)

staticHandler := http.StripPrefix("/static/", http.FileServer(http.Dir("./client/build/static")))
r.PathPrefix("/static/").Handler(staticHandler)

r.HandleFunc("/", index).Methods("GET")

srv := &http.Server{
    Handler:      r,
    Addr:         "127.0.0.1:8080",
    WriteTimeout: 15 * time.Second,
    ReadTimeout:  15 * time.Second,
}

// serve
fmt.Println("Server started on PORT 8080")
log.Fatal(srv.ListenAndServe())


}

Воткод для индекса маршрута

func index(w http.ResponseWriter, r *http.Request) {
    // not sure if this is necessary
    http.ServeFile(w, r, "index.html")
}

Я считаю, что решение простое, и я, скорее всего, где-то делаю небольшую ошибку.

1 Ответ

2 голосов
/ 25 сентября 2019

В вашем случае нужен только обработчик сборки.Он должен указывать на каталог, а не файл.Остальные обработчики устарели, кроме случая маршрутизации.

package main

import (
    "fmt"
    "github.com/gorilla/mux"
    "log"
    "net/http"
    "time"
)

func main() {

    r := mux.NewRouter()

    r.HandleFunc("/route1", index).Methods("GET")
    r.HandleFunc("/route2", index).Methods("GET")
    buildHandler := http.FileServer(http.Dir("client/build"))
    r.PathPrefix("/").Handler(buildHandler)

    srv := &http.Server{
        Handler:      r,
        Addr:         "127.0.0.1:8080",
        WriteTimeout: 15 * time.Second,
        ReadTimeout:  15 * time.Second,
    }

    fmt.Println("Server started on PORT 8080")
    log.Fatal(srv.ListenAndServe())

}

func index(w http.ResponseWriter, r *http.Request) {
    http.ServeFile(w, r, "client/build/index.html")
}

То же самое может быть достигнуто только со стандартной библиотекой.

package main

import (
    "fmt"
    "log"
    "net/http"
    "time"
)

func main() {

    r := http.NewServeMux()

    r.HandleFunc("/route1", index)
    r.HandleFunc("/route2", index)
    buildHandler := http.FileServer(http.Dir("client/build"))
    r.Handle("/", buildHandler)

    srv := &http.Server{
        Handler:      r,
        Addr:         "127.0.0.1:8080",
        WriteTimeout: 15 * time.Second,
        ReadTimeout:  15 * time.Second,
    }

    fmt.Println("Server started on PORT 8080")
    log.Fatal(srv.ListenAndServe())

}

func index(w http.ResponseWriter, r *http.Request) {
    http.ServeFile(w, r, "client/build/index.html")
}
...