Golang сайт: Nginx + Service не пропускает HTML шаблон

EskEskEsk

Новичок
Пользователь
Окт 28, 2022
2
1
3
Всем привет, пытаюсь запустить сервак, с кодом ниже.
Сервер на Ubuntu, Наружу открывается все через NGINX

1. Если запустить код через "go run ." снаружи видно сайт с шаблонами, все как надо.
2. Если звернуть код в service - снаружи ошибка,

"Страница недоступна
Сайт IP не отправил данных.
ERR_EMPTY_RESPONSE

"

3. Без HTML шаблонов все ок.
Сами шаблоны лежат в root/go/servicename где и бинарник

В чем может быть ошибка?


C-подобный:
package main

import (
    "log"
    "net/http"
    a "obm/prilas/adminka"
)

func main() {

    mux := http.NewServeMux()

    //mux.HandleFunc("/snippet/create", createSnippet)

    // Инициализируем FileServer, он будет обрабатывать
    // HTTP-запросы к статическим файлам из папки "./ui/static".
    // Обратите внимание, что переданный в функцию http.Dir путь
    // является относительным корневой папке проекта
    fileServer := http.FileServer(http.Dir("./ui/static/"))

    // Используем функцию mux.Handle() для регистрации обработчика для
    // всех запросов, которые начинаются с "/static/". Мы убираем
    // префикс "/static" перед тем как запрос достигнет http.FileServer
    mux.Handle("/static/", http.StripPrefix("/static", fileServer))

    //    Телега-данные
    //mux.HandleFunc("/usermessages", a.GetMessageFromTlg) //    Это страница приема данных

    //    Админка
    mux.HandleFunc("/", a.IndexPage) //    Главная админки

    mux.HandleFunc("/test", a.Test) //    Главная админки

    mux.HandleFunc("/login", a.LoginForm)     //    Форма входа в админку
    mux.HandleFunc("/restore", a.RestoreForm) //    Форма восстановления доступа
    mux.HandleFunc("/newuser", a.NewUserForm) //    Форма добавления пользователя
    //mux.HandleFunc("/loginauth", a.Auth)      //    Обработчик входа в админку
    //mux.HandleFunc("/logout", a.Logout)       //    Обработчик выхода с админки
    //mux.HandleFunc("/restoreauth", a.Logout)       //    Обработчик восстановления пароля
    //mux.HandleFunc("/newuserauth", a.Logout)       //    Обработчик создания нового пользователя


    log.Println("Запуск веб-сервера на http://127.0.0.1:9990")
    err := http.ListenAndServe(":9990", mux)
    log.Fatal(err)
}

Пример возвращаемых значений

C-подобный:
func IndexPage(w http.ResponseWriter, r *http.Request) {
    //    Шаблон используемый для начала
    var tpl = template.Must(template.ParseFiles("tpls/indexpage.html")) //    Шаблон используемый
    returnRequest.Error = "no_error"                                    //    Изначальная ошибка

    //    Возврат данных
    tpl.Execute(w, returnRequest)

}
 
Последнее редактирование модератором:

EskEskEsk

Новичок
Пользователь
Окт 28, 2022
2
1
3
Решилось зашиванием всей статики в бинарник через "EMBED"

C-подобный:
package main

import (
    "embed"
    "log"
    "net/http"
)

//go:embed ui/*
var assetData embed.FS

type ReturnRequest struct {
    Error       string      `json:"error"` //    Статус ошибки
    LoginUsers  interface{} //    Пользователь зарегистрировавшийся
    DataRequest interface{} //    Пользователь зарегистрировавшийся
}

var returnRequest ReturnRequest

func main() {
    mux := http.NewServeMux()

    mux.HandleFunc("/test", Test) //    Тестовая страница

    mux.HandleFunc("/", IndexPage) //    Главная админки

    mux.HandleFunc("/login", LoginForm)     //    Тестовая страница
    mux.HandleFunc("/restore", RestoreForm) //    Тестовая страница
    mux.HandleFunc("/newuser", NewUserForm) //    Тестовая страница

    // Используем функцию mux.Handle() для регистрации обработчика для
    // всех запросов, которые начинаются с "/static/". Мы убираем
    // префикс "/static" перед тем как запрос достигнет http.FileServer
    mux.Handle("/static/", http.StripPrefix("/static", http.FileServer(http.FS(assetData))))

    log.Println("Запуск веб-сервера на http://127.0.0.1:9990")
    err := http.ListenAndServe(":9990", mux)
    log.Fatal(err)
}

C-подобный:
func LoginForm(w http.ResponseWriter, r *http.Request) {
    t, err := template.ParseFS(assetData, "ui/tpls/loginform.html")
    if err != nil {
        fmt.Println(err)
    }
    templateData := struct {
        Title string
    }{
        Title: "Форма входа",
    }
    t.Execute(w, templateData)

}

При этом это фиксить уже некогда
HTML:
<link href="static/ui/static/css/dark.css" rel="stylesheet">
 
Последнее редактирование модератором:
  • Мне нравится
Реакции: Student

Student

throw exception
Команда форума
Администратор
Апр 2, 2020
188
98
28
Москва
@EskEskEsk найс! Очень круто, что ты нашел решение и запостил её! Спасибо!
 

Форум IT Специалистов