Задать вопрос
@VadimRublev
Go, front-end (ванильный).

Почему Go-сервер не открывает страницу?

Почему этот сервер открывает страницу:
func main() {
    fmt.Println("Server is listening port... :900")

	http.ListenAndServe("127.0.0.1:900", http.FileServer(http.Dir("F:/Projects/www/domen.com/")))
}


По URL localhost:900 открывается файл index.* из указанной директории.

А этот нет (браузер, или Go?, сообщает "404 page not found"):
func allRout(w http.ResponseWriter, r *http.Request) {
    http.FileServer(http.Dir("F:/Projects/www/domen.com/")).ServeHTTP(w, r)
}

func main() {
    fmt.Println("Server (with TLS) is listening port... :600")
     
    var mux = http.NewServeMux()
    
    mux.HandleFunc("/", allRout)             // Общий маршрут.
     
    var serv = &http.Server {
        Addr:         "127.0.0.1:600",
        ReadTimeout:  15 * time.Second,
        WriteTimeout: 15 * time.Second,
    }
    log.Fatal(serv.ListenAndServeTLS("F:/Projects/www/domen.com/cert.pem", "F:/Projects/www/domen.com/key.pem"))
}


Тоже должен открыться файл index.html из указанной директории.
Пробовал URL: localhost:600 , localhost:600/index.html
OS Windows 10.

P.S. Причем раньше работало нормально, но внезапно сломалось.
В брандмауэре разрешены все локальные порты.
  • Вопрос задан
  • 288 просмотров
Подписаться 1 Простой 4 комментария
Решения вопроса 1
Не сразу заметил, вы забыли сказать серверу использовать ваш mux

var serv = &http.Server {
        Addr:         "127.0.0.1:600",
        ReadTimeout:  15 * time.Second,
        WriteTimeout: 15 * time.Second,
        Handler: mux, // <---- здесь
    }


Кстати, не стоит делать так:
func allRout(w http.ResponseWriter, r *http.Request) {
    http.FileServer(http.Dir("F:/Projects/www/domen.com/")).ServeHTTP(w, r)
}

Вы по сути при каждом запросе создаете файловый сервер и после запроса он удаляется сборщиком мусора. Нужно один раз его создать (вызвать http.FileServer(...)), а потом в хендлере вызывать ServeHTTP уже у готового сервера.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы