Голанг получает 404 во время работы сервера - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь запустить основное веб-приложение, следуя инструкциям, используя Golang и пакет маршрутизации Gorilla / mux.Сервер работает нормально, но он отказывается найти файл index.html независимо от того, что я поместил в браузер, всегда возвращая 404.

Вот код:

main.go

    package main

    import (
    "database/sql"
    "fmt"
    "net/http"

    "github.com/gorilla/mux"
    _ "github.com/lib/pq"
    )

    const (
    host     = "localhost"
    port     = 5432
    user     = "postgres"
    password = "0102"
    dbname   = "bird_encyclopaedia"
)

func newRouter() *mux.Router {
    r := mux.NewRouter()
    r.HandleFunc("/hello", handler).Methods("GET")


    staticFileDirectory := http.Dir("./assets/")
    staticFileHandler := http.StripPrefix("/assets/", http.FileServer(staticFileDirectory))
    r.PathPrefix("/assets/").Handler(staticFileHandler).Methods("GET")

    r.HandleFunc("/bird", getBirdHandler).Methods("GET")
    r.HandleFunc("/bird", createBirdHandler).Methods("POST")
    return r
}

func main() {
    fmt.Println("Starting server dickface...")
    connString := fmt.Sprintf("host=%s port=%d user=%s "+
        "password=%s dbname=%s sslmode=disable",
        host, port, user, password, dbname)
    db, err := sql.Open("postgres", connString)

    if err != nil {
        panic(err)
    }
    err = db.Ping()

    if err != nil {
        panic(err)
    }

    InitStore(&dbStore{db: db})

    r := newRouter()
    fmt.Println("Serving on port 8080")
    http.ListenAndServe(":8080", r)
}

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello World!")
}

HTML-файл находится только в каталоге assets / index.html, я могу предоставить его, если это необходимо, но я не вижу проблемы в фактическом html?

Iмного раз просматривали код и не могли понять, почему сервер не сможет найти каталог.Я пробовал localhost / 8080 / assets, localhost / 8080 / assets / index.html, localhost / 8080 и все другие варианты.

Если я добавлю его с / hello mind, он вернет мир Hello, как видно изmain.go И если я добавлю его с / bird, он возвращает «ноль» вместо 404.

1 Ответ

0 голосов
/ 14 февраля 2019

Вам не нужно http.StripPrefix () , поскольку вы не используете assets в URL.


Просто измените эти две строки:

staticFileHandler := http.StripPrefix("/assets/", http.FileServer(staticFileDirectory))
r.PathPrefix("/assets/").Handler(staticFileHandler).Methods("GET")

до

staticFileHandler := http.FileServer(staticFileDirectory)
r.PathPrefix("/").Handler(staticFileHandler).Methods("GET")
...