// Handle the home page request. func indexHandler(w http.ResponseWriter, req *http.Request) { layout, err := template.ParseFile(PATH_PUBLIC + TEMPLATE_LAYOUT) if err != nil { http.Error(w, ERROR_TEMPLATE_NOT_FOUND, http.StatusNotFound) return } index, err := template.ParseFile(PATH_PUBLIC + TEMPLATE_INDEX) //artical, err := template.ParseFile(PATH_PUBLIC + TEMPLATE_ARTICAL) if err != nil { http.Error(w, ERROR_TEMPLATE_NOT_FOUND, http.StatusNotFound) return } mapOutput := map[string]interface{}{"Title": "炫酷的网站技术" + TITLE, "Keyword": KEYWORD, "Description": DESCRIPTION, "Base": BASE_URL, "Url": BASE_URL, "Carousel": getAddition(PREFIX_INDEX), "Script": getAddition(PREFIX_SCRIPT), "Items": leveldb.GetRandomContents(20, &Filter{})} content := []byte(index.RenderInLayout(layout, mapOutput)) w.Write(content) go cacheFile("index", content) }
func fecthHandler(w http.ResponseWriter, req *http.Request) { url := req.URL.Path layout, err := template.ParseFile(PATH_PUBLIC + TEMPLATE_LAYOUT) if err != nil { http.Error(w, ERROR_TEMPLATE_NOT_FOUND, http.StatusNotFound) return } artical, err := template.ParseFile(PATH_PUBLIC + TEMPLATE_ARTICAL) if err != nil { http.Error(w, ERROR_TEMPLATE_NOT_FOUND, http.StatusNotFound) return } key := bytes.Trim([]byte(url), "/") bs, err := leveldb.Get(key) if err != nil { http.Error(w, ERROR_TEMPLATE_NOT_FOUND, http.StatusNotFound) return } sps := bytes.Split(bs, []byte(DELIMITER)) if len(sps) > 3 { page := struct { Title, Keyword, Description, Markdown, Base, Url string }{ Title: string(sps[0]) + TITLE, Keyword: string(sps[1]), Description: string(sps[2]), Markdown: convertToHTML(bytes.Replace(sps[3], []byte("{{Base}}"), []byte(BASE_URL), -1)), Base: BASE_URL, Url: BASE_URL + string(key) + "/", } content := []byte(artical.RenderInLayout(layout, &page)) go cacheFile(string(key), content) w.Write(content) } else { http.Error(w, ERROR_TEMPLATE_NOT_FOUND, http.StatusNotFound) return } }