加载js文件时返回404错误

时间:2016-02-25 20:03:20

标签: javascript html go

当我想渲染包含js文件上的脚本链接的html文件时,我收到错误。 但是当我加载页面时,我得到了这个错误:

Started GET "/views/script.js" .... Returning 404

我的文件夹就像这样

|--todolist 
   |--main.go
   |--views/
      |--index.html
      |--script.js

main.go

package main

import (
    "github.com/zenazn/goji"
    "html/template"
    "net/http"
)

func renderHTMLPage(w http.ResponseWriter, path string) {
    t, err := template.ParseFiles(path)
    if err != nil {
        panic(err)
    }
    t.Execute(w, nil)
}

func Index(w http.ResponseWriter, r *http.Request) {
    renderHTMLPage(w, "./views/index.html")
}

func main() {
        goji.Get("/", Index)
        goji.Serve()
}

视图/ index.html中

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Le titre du document</title>
  </head>
  <body>

    <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
    <script src="script.js"></script>

<h1>To-Do List </h1>
<ul id="todolist">
<li> Hello <button>Delete</button></li>
<li> Wesh <button>Delete</button></li>
</ul>

<input type="text" id="new-text" /><button id="add">Add</button>
  </body>
</html>

视图/的script.js

function addListItem() {
    var text = $('#new-text').val()
    if (text != "") {
        $('#todolist').append('<li>'+text+'<button id="dede" name=\"' + i + '\">Delete</button></li>')
    }
    $('#new-text').val("")
}

function deleteItem() {
    $(this).parent().remove()
}


$(function() {

    $('#add').on('click', addListItem);

    $("#todolist").on("click", "#dede", deleteItem)

});

如何正确加载js文件?

创建一个只在构造中使用jquery / javascript和golang api的应用程序的最佳方法是什么?

谢谢

2 个答案:

答案 0 :(得分:1)

您需要:

  • 从包含/views的目录服务 - 例如goji.Get(&#34; / views / *&#34;,http.FileServer(http.Dir(&#34; / Users / matt / Desktop / views /&#34;)))`
  • 使用http.StripPrefix(推荐)

以下允许您将路径与目录名称分离:

func main() {
    goji.Get("/views/*", http.StripPrefix("/views", http.FileServer(http.Dir("/Users/matt/Desktop/views/"))))
    goji.Get("/", Index)
    goji.Serve()
}

我建议不要在&#39; root&#39; - /*。更好地从专用资产路径提供服务,因为它在查看缓存,与CDN交互等时更容易。

答案 1 :(得分:0)

在这种特殊情况下,代码应该看起来像

goji.Get("/", Index)
goji.Get("/*", http.FileServer(http.Dir("./views")))
goji.Serve()

但我必须说保持模板和静态文件在同一目录中是个坏主意,也不能从root用户提供静态文件。