Golang включает Javascript файл, когда шаблон отображается - PullRequest
0 голосов
/ 01 мая 2018

У меня есть 3 страницы: index.hml, admin.html и host.html. У меня есть javascript на страницах внутри тегов сценария. Я хочу переместить весь javascript в один файл, и он будет доступен на каждой странице.

Я пытался связать файл JS со своих html-страниц, например:

<script src="static/app.js" type= "text/javascript"></script>

но я получаю ошибку:

Uncaught SyntaxError: Unexpected token <

Я попытался поиграться с этим путем src, в том числе переместить файл app.js на тот же уровень, что и файл html, и изменить src на «app.js», но это все равно выдает то же сообщение об ошибке.

Это заставляет меня думать, что это связано с тем, как сервер рендерит файлы (используя ServeMux).

мой код:

func requestHandler(tpl *template.Template) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        tpl.Execute(w, r)
    })
}

func main() {
    flag.Parse()
    user := template.Must(template.ParseFiles("index.html"))
    admin := template.Must(template.ParseFiles("admin.html"))
    host := template.Must(template.ParseFiles("host.html"))
    router := http.NewServeMux()
    router.Handle("/", requestHandler(user))
    router.Handle("/admin", requestHandler(admin))
    router.Handle("/host", requestHandler(host))
    log.Fatal(http.ListenAndServe(":8081", router))
}

Я искал SO и пробовал много вещей, включая:

http.Handle("/js", http.FileServer(http.Dir("static/")))

с файлом javascript внутри static / app.js, однако это просто отображает мою страницу индекса без загрузки JS. Мне не удается загрузить файл JS на страницу.

Я также попытался прочитать файл JS, изменить тип содержимого и записать файл JS в устройство записи следующим образом:

        data, err := ioutil.ReadFile("app.js")
    if err != nil {
        fmt.Println("error: ", err)
        return
    }
    w.Header().Add("Content Type", "application/javascript")
    w.Write(data)

однако, это просто отображает весь текст на странице, когда JS не запущен, а текст не отображается как HTML. На странице вижу:

alert("loaded");<!DOCTYPE html>
<html>
<head>
<title>Example</title>

Заголовок index.html:

<!DOCTYPE html>
<html>
<head>
<title>Chat Example</title>    
</script>
<script src="static/app.js" type= "text/javascript"></script>

Я чувствую, что должен быть более простой способ загрузить JS. Это попытка 2 с дополнительным объяснением, кодом и примерами того, что я пробовал.

1 Ответ

0 голосов
/ 01 мая 2018

Вы должны сослаться на скрипт в своем HTML:

<html>
    <head>
        <script src="/js/app.js"></script>
        ...
    </head>
    <body>...</body>
</html>

Также обратите внимание, что для обслуживания всего каталога путь, зарегистрированный в мультиплексоре, должен иметь косую черту:

http.Handle("/js/", http.FileServer(http.Dir("static/")))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...