Служите статическим html-файлам с помощью Gorilla Mux - PullRequest
0 голосов
/ 02 июня 2018

Я пытаюсь обслуживать разные HTML-файлы в зависимости от маршрута.Маршрутизатор работает нормально для "/" и обслуживает index.html.Однако при переходе к любому другому маршруту, например, «/ download», он также отображает index.html, даже если файл, который должен быть обработан, называется share.html.

Что я здесь не так делаю?

    package main

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

// main func
func main() {
    routes()
}

// routes
func routes() {
    // init router
    r := mux.NewRouter()
    // index route
    r.HandleFunc("/", home)
    r.HandleFunc("/share", share)
    r.HandleFunc("/download", download)

    // start server on port 1337
    log.Fatal(http.ListenAndServe(":1337", r))
}

// serves index file
func home(w http.ResponseWriter, r*http.Request) {
    p := path.Dir("./public/views/index.html")
    // set header
    w.Header().Set("Content-type", "text/html")
    http.ServeFile(w, r, p)
}

// get shared files
func share(w http.ResponseWriter, r *http.Request) {
    switch r.Method {
    case "POST":
        if err := r.ParseForm(); err != nil {
            fmt.Fprint(w, "ParseForm() err: %v", err)
            return
        }
        log.Println(r.FormValue("name"))
        http.Redirect(w, r, "/download", http.StatusMovedPermanently)
    }
}

func download(w http.ResponseWriter, r *http.Request) {
    p := path.Dir("./public/views/share.html")
    // set header
    w.Header().Set("Content-type", "text/html")
    http.ServeFile(w, r, p)
}

Ответы [ 2 ]

0 голосов
/ 31 мая 2019

Я полагаю, вы можете искать "PathPrefix"

func routes() {
    // init router
    r := mux.NewRouter()
    r.PathPrefix("/").Handler(http.FileServer(http.Dir("./public/views/")))
}
0 голосов
/ 02 июня 2018

Удалить все вызовы path.Dir ().Этот вызов возвращает часть пути к каталогу.Код обслуживает index.html, потому что ServeFile ищет index.html при наличии каталога.

...