2017-10-05 97 views
-1

下面是我用於呈現我的html模板的函數。我最近開始在我的博客頁面上工作,出於某種原因,我的第一個和第二個「else if」語句沒有被擊中。 :爲什麼不是我的URL.Path語句受到影響

func handleRequest(w http.ResponseWriter, r *http.Request) { 
    templates := populateTemplates() 
    // present home.html if the request url is "/" 
    if r.URL.Path == "/" { 
     t := templates.Lookup("home.html") 
     t.Execute(w, nil) 
    } else if r.URL.Path == "blog/" { 
     posts := getPosts() 
     t := template.New("blog.html") 
     t, _ = t.ParseFiles("blog.html") 
     t.Execute(w, posts) 
     return 
    } else if r.URL.Path == "blog/*" { 
     f := "blog/" + r.URL.Path[1:] + ".md" 
     fileread, _ := ioutil.ReadFile(f) 
     lines := strings.Split(string(fileread), "\n") 
     status := string(lines[0]) 
     title := string(lines[1]) 
     date := string(lines[2]) 
     summary := string(lines[3]) 
     body := strings.Join(lines[4:len(lines)], "\n") 
     htmlBody := template.HTML(blackfriday.MarkdownCommon([]byte(body))) 
     post := Post{status, title, date, summary, htmlBody, r.URL.Path[1:]} 
     t := template.New("_post.html") 
     t, _ = t.ParseFiles("_post.html") 
     t.Execute(w, post) 
    } else { 
     requestedFile := r.URL.Path[1:] 
     t := templates.Lookup(requestedFile + ".html") 
     if t != nil { 
      err := t.Execute(w, nil) 
      if err != nil { 
       log.Println(err) 
      } 
     } else { 
      w.WriteHeader(http.StatusNotFound) 
     } 
    } 
} 
+5

URL路徑以斜槓開頭。 – Peter

+4

此外'如果r.URL.Path ==「博客/ *」'...如果你認爲'=='會爲你做正則表達式匹配,那麼你錯了,如果另一方面你有一個像這樣的終點,然後不理我。 – mkopriva

+1

在ifs之前打印「r.URL.Path」是什麼? –

回答

1

假設的問題是與博客的網址,你可以改爲嘗試這個辦法:

if r.URL.Path == "/" { 
... 
} else if r.URL.Path == "/blog" { 
... 
} else if strings.HasPrefix(r.URL.Path,"/blog/") { 
....  
} else { 

我希望templates.Lookup不作任何文件系統調用,想必它只是看起來他們在地圖上。

而且,不這樣做:

f := "blog/" + r.URL.Path[1:] + ".md" 
fileread, _ := ioutil.ReadFile(f) 

如果r.URL.Path會發生什麼[1:]爲 「../mysecretfile」,你不得不有一個匹配的文件?使用外部字符串而不用清潔路徑不是一個好主意。清潔或類似。

+0

謝謝Kenny,就是這樣。我誤解了這些URL路徑的文檔,我確信我有他們的權利......:/至於其他建議,非常感謝,這是我第一個自我教育的Web開發項目,任何建議都非常感謝。 – FishFenly

+0

沒問題。很高興你把事情解決了。 –

相關問題