Как я могу обслуживать файл CSS и иметь динамическую маршрутизацию? - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь настроить HTTP-сервер в Go, используя только стандартную библиотеку. Сервер должен иметь возможность принимать запросы в форме /:uuid и должен обслуживать файл index.html, а также импортированный в него файл CSS. Вот как выглядел мой код:

 func indexHandler(w http.ResponseWriter, r *http.Request) {
    // serve index.html
    if r.URL.Path == "/" {
        http.ServeFile(w, r, "./web/index.html")
    } else {
        // if the path is /randomwords, redirect to mapped URL
        randomwords := r.URL.Path[1:]
        url := getMappedURL(randomwords)
        http.Redirect(w, r, url, http.StatusFound)
    }
}

func main() {
  http.HandleFunc("/", indexHandler)
  log.Println("listening on port 5000")
  http.ListenAndServe(":5000", nil)
}

Служит для html-файла и может принимать запросы типа /:something, но проблема в том, что он не включает файл CSS. После некоторого поиска в Google я изменил основную функцию так:

func main() {
    fs := http.FileServer(http.Dir("web"))
    http.Handle("/", fs)
    log.Println("listening on port 5000")
    http.ListenAndServe(":5000", nil)
}

Служит для файлов HTML и CSS, но не допускает маршруты вида :something. Я не могу понять, как использовать обе эти функции.

1 Ответ

0 голосов
/ 27 июня 2018

Ваше оригинальное решение уже близко, все, что вам нужно сделать, это добавить ветку:

if r.URL.Path == "/" {
    http.ServeFile(w, r, "./web/index.html")
} else if r.URL.Path == "/styles.css" {
    http.ServeFile(w, r, "./web/styles.css")
} else {
    // ...

Конечно, это можно настроить по мере необходимости - вы можете проверить любой файл, заканчивающийся на ".css", используя, например, strings.HasSuffix.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...