<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 錯誤處理 我們在做 Web 開發的時候,經常需要頁面跳轉和錯誤處理,beego 這方面也進行了考慮,通過 `Redirect` 方法來進行跳轉: ```go func (this *AddController) Get() { this.Redirect("/", 302) } ``` 如何中止此次請求并拋出異常,beego 可以在控制器中這樣操作: ```go func (this *MainController) Get() { this.Abort("401") v := this.GetSession("asta") if v == nil { this.SetSession("asta", int(1)) this.Data["Email"] = 0 } else { this.SetSession("asta", v.(int)+1) this.Data["Email"] = v.(int) } this.TplName = "index.tpl" } ``` 這樣 `this.Abort("401")` 之后的代碼不會再執行,而且會默認顯示給用戶如下頁面: ![](https://img.kancloud.cn/60/bc/60bc2256c3d78a6ba149731798746f49_635x353.png) beego 框架默認支持 401、403、404、500、503 這幾種錯誤的處理。用戶可以自定義相應的錯誤處理,例如下面重新定義 404 頁面: ```go func page_not_found(rw http.ResponseWriter, r *http.Request){ t,_:= template.New("404.html").ParseFiles(beego.BConfig.WebConfig.ViewsPath+"/404.html") data :=make(map[string]interface{}) data["content"] = "page not found" t.Execute(rw, data) } func main() { beego.ErrorHandler("404",page_not_found) beego.Router("/", &controllers.MainController{}) beego.Run() } ``` 我們可以通過自定義錯誤頁面 `404.html` 來處理 404 錯誤。 beego 更加人性化的還有一個設計就是支持用戶自定義字符串錯誤類型處理函數,例如下面的代碼,用戶注冊了一個數據庫出錯的處理頁面: ```go func dbError(rw http.ResponseWriter, r *http.Request){ t,_:= template.New("dberror.html").ParseFiles(beego.BConfig.WebConfig.ViewsPath+"/dberror.html") data :=make(map[string]interface{}) data["content"] = "database is now down" t.Execute(rw, data) } func main() { beego.ErrorHandler("dbError",dbError) beego.Router("/", &controllers.MainController{}) beego.Run() } ``` 一旦在入口注冊該錯誤處理代碼,那么你可以在任何你的邏輯中遇到數據庫錯誤調用 `this.Abort("dbError")` 來進行異常頁面處理。 # Controller 定義 Error 從 1.4.3 版本開始,支持 Controller 方式定義 Error 錯誤處理函數,這樣就可以充分利用系統自帶的模板處理,以及 context 等方法。 ``` package controllers import ( "github.com/astaxie/beego" ) type ErrorController struct { beego.Controller } func (c *ErrorController) Error404() { c.Data["content"] = "page not found" c.TplName = "404.tpl" } func (c *ErrorController) Error501() { c.Data["content"] = "server error" c.TplName = "501.tpl" } func (c *ErrorController) ErrorDb() { c.Data["content"] = "database is now down" c.TplName = "dberror.tpl" } ``` 通過上面的例子我們可以看到,所有的函數都是有一定規律的,都是 `Error` 開頭,后面的名字就是我們調用 `Abort` 的名字,例如 `Error404` 函數其實調用對應的就是 `Abort("404")` 我們就只要在 `beego.Run` 之前采用 `beego.ErrorController` 注冊這個錯誤處理函數就可以了 ``` package main import ( _ "btest/routers" "btest/controllers" "github.com/astaxie/beego" ) func main() { beego.ErrorController(&controllers.ErrorController{}) beego.Run() } ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看