實作 - 從零開始用 Golang 寫網頁 - 06 加入錯誤頁面

[實作] 從零開始用 Golang 寫網頁 : 06 加入錯誤頁面

通常網頁伺服器或框架本身會內建錯誤通知頁面給使用者,但通常會暴露許多技術細節,所以要上線的網頁程式必須提供自己的錯誤頁面

1
2
3
4
5
6
7
8
9
10
11
func notFound(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusNotFound)

t, err := template.ParseFiles("./templates/errorpage/NotFoundPage.html")

if err != nil {
fmt.Println("NotFoundPage開啟錯誤 : ", err)
}

t.Execute(w, nil)
}
1
2
3
4
5
6
7
8
9
10
11
func errHandler(w http.ResponseWriter, r *http.Request, p interface{}) {
w.WriteHeader(http.StatusInternalServerError)

t, err := template.ParseFiles("./templates/errorpage/ServerErrorPage.html")

if err != nil {
fmt.Println("ServerErrorPage開啟錯誤 : ", err)
}

t.Execute(w, nil)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
func main() {

mux := httprouter.New()

mux.GET("/", index)
mux.GET("/:name", hello)

mux.NotFound = http.HandlerFunc(notFound)

mux.PanicHandler = errHandler

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

fmt.Println("服務器即將開啟, 訪問地址 http://localhost:8080")

server := http.Server{
Addr: ":8080",
Handler: mux,
}

err := server.ListenAndServe()

if err != nil {
fmt.Println("服務器開啟錯誤 : ", err)
}
}

notFound、errHandler

  • 這裡新增兩個處理函式,分別是 notFounderrHandler

    • 兩個函式內的 w.WriteHeader() 用來寫入 HTTP 狀態碼

    • notFound 寫入的狀態碼為 http.StatusNotFound(404),代表此頁面不存在

    • errHandler 寫入的狀態碼為 http.StatusInternalServerError(500),代表程式內部發生錯誤

main

  • 這邊指定 mux.NotFoundmux.PanicHandler 兩個事件的處理器

結果

  • 輸入不存在的地址,就會導到錯誤頁

tags: 實作 Golang 網站
Author: Kenny Li
Link: https://kennyliblog.nctu.me/2020/09/07/Golang-Web6/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.