beego——错误处理
beego通过Redirect方法来进行跳转:
1 2 3 | func (this *AddController) Get() { this.Redirect( "/" , 302) } |
如何终止此次请求并抛出异常,beego可以在控制器中这样操作:
1 2 3 4 5 6 7 8 9 10 11 12 | 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")
之后的代码不会再执行,而且会默认显示给用户如下页面:
beego 框架默认支持 401、403、404、500、503 这几种错误的处理。用户可以自定义相应的错误处理,例如下面重新定义 404 页面:
1 2 3 4 5 6 7 8 9 10 11 12 | //定义处理404错误的函数<br>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) //如果是404错误返回什么 beego.Router( "/" , &controllers.MainController{}) //正常跳转 beego.Run() } |
我们可以通过自定义错误页面 404.html
来处理 404 错误。
beego 更加人性化的还有一个设计就是支持用户自定义字符串错误类型处理函数,
例如下面的代码,用户注册了一个数据库出错的处理页面:
1 2 3 4 5 6 7 8 9 10 11 12 | 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 等方法。
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 | 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
注册这个错误处理函数就可以了
1 2 3 4 5 6 7 8 9 10 11 12 13 | package main import ( _ "btest/routers" "btest/controllers" "github.com/astaxie/beego" ) func main() { beego.ErrorController(&controllers.ErrorController{}) beego.Run() } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
2017-12-15 Redis重大版本
2017-12-15 MySQL——存储引擎
2017-12-15 Redis使用场景
2017-12-15 查看一张表的信息