2016-02-25 4 views
-1

Я получаю сообщение об ошибке, когда я хотел бы отобразить html-файл, содержащий ссылку на скрипт в файле js. Но когда я загрузить страницу я получаю эту ошибку:возвратил ошибку 404 при загрузке js-файла

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 на архитектуре?

Спасибо

ответ

1

Вам нужно либо:

  • Подавать из каталога, содержащего /views - например, goji.Get ("/ вид/*", http.FileServer (http.Dir ("/ Users/матовые/Desktop/просмотров /"))) `
  • Использование http.StripPrefix (рекомендуется)

Ниже позволяет отделить путь от имени каталога:

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

Я рекомендовал бы против выступающей из «корня» - /*. Лучше обслуживать по выделенному пути активов, поскольку это облегчает просмотр кеширования, взаимодействие с CDN и т. Д.

+0

Спасибо за помощь, это работает! – Fantasim

0

В данном случае код должен выглядеть

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

Но я должен сказать, сохраняя шаблоны и статические файлы в том же каталоге плохая идея, а также служить статические файлы из корня.

+0

не работает. Как бы вы поступили? – Fantasim

+1

@Fantasim помещает все статические файлы в папку 'assets', такие как' assets/js', 'assets/css' и т. Д., И заменяет' goji.Get ("/ *", http.FileServer (http.Dir ("./ views ")))' с 'goji.Get ("/assets/* ", http.FileServer (http.Dir (" ./ assets ")))' будет хорошим началом. Таким образом, вы сможете работать с маршрутами приложений, не думая о конфликтах между статическими именами файлов и динамическими частями. –

+0

Хорошо, я попробую, спасибо :) – Fantasim

Смежные вопросы