beego 如何自定error
如何 Error Beego
2023-09-14 09:12:25 时间
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() } |
相关文章
- html小写罗马字符怎么写,如何在 LATEX 中插入大小写的罗马字符[通俗易懂]
- 如何在Linux中删除软链接
- EasyNVR新版本无法对接到EasyNVS平台并报错login error,该如何解决?
- 漫画大数据:如何解决 NameNode 内存持续增长的问题(三)
- ORA-38908: internal error occurred during DML Error Logging ORACLE 报错 故障修复 远程处理
- MySQL Error number: 3048; Symbol: ER_STD_OUT_OF_RANGE_ERROR; SQLSTATE: HY000 报错 故障修复 远程处理
- MySQL Error number: 3176; Symbol: ER_ERROR_ON_MODIFYING_GTID_EXECUTED_TABLE; SQLSTATE: HY000 报错 故障修复 远程处理
- MySQL Error number: 3635; Symbol: ER_APPLIER_LOG_EVENT_VALIDATION_ERROR; SQLSTATE: HY000 报错 故障修复 远程处理
- MySQL Error number: 4141; Symbol: ER_BULK_LOADER_COMPONENT_ERROR; SQLSTATE: HY000 报错 故障修复 远程处理
- MySQL Error number: MY-010718; Symbol: ER_RPL_ERROR_WRITING_SLAVE_WORKER_CONFIGURATION; SQLSTATE: HY000 报错 故障修复 远程处理
- MySQL Error number: MY-011466; Symbol: ER_GRP_RPL_ADD_RETRIEVED_SET_TO_GRP_GTID_EXECUTED_ERROR; SQLSTATE: HY000 报错 故障修复 远程处理
- ORA-16734: error executing DBMS_LOGSTDBY.SKIP_ERROR procedure ORACLE 报错 故障修复 远程处理
- MySQL Error number: MY-013212; Symbol: ER_GRP_RPL_CONFIGURATION_ACTION_ERROR; SQLSTATE: HY000 报错 故障修复 远程处理
- MySQL Error number: MY-013221; Symbol: ER_GRP_RPL_UDF_UNREGISTER_ERROR; SQLSTATE: HY000 报错 故障修复 远程处理
- MySQL Error number: MY-013255; Symbol: ER_IB_MSG_ERROR_OPENING_NEW_UNDO_SPACE; SQLSTATE: HY000 报错 故障修复 远程处理
- MySQL Error number: MY-013256; Symbol: ER_IB_MSG_FAILED_SDI_Z_BUF_ERROR; SQLSTATE: HY000 报错 故障修复 远程处理
- MySQL Error number: MY-013696; Symbol: ER_HEALTH_ERROR; SQLSTATE: HY000 报错 故障修复 远程处理
- MySQL Error number: MY-013758; Symbol: ER_GRP_RPL_UPDATE_GRPGTID_VIEW_CHANGE_UUID_EXECUTED_ERROR; SQLSTATE: HY000 报错 故障修复 远程处理
- MySQL Error number: MY-013809; Symbol: ER_AUTHENTICATION_OCI_PRIVATE_KEY_ERROR; SQLSTATE: HY000 报错 故障修复 远程处理
- 文件系统简易指南:清理Linux文件系统(如何清理linux)
- 如何快速使用Oracle数据库导出表结构(oracle数据库导出表结构)
- 浅析Oracle补丁升级的实践(oracle如何升级补丁)
- 如何使用Java备份Oracle数据库?(java备份oracle)
- 如何在 Linux 系统中设置文件的可读权限?(linux文件可读)
- 如何在Oracle中截取日期,获取年月日?(oracle截取年月日)
- 如何查看MySQL安装是否成功?(查看mysql是否安装成功)
- 如何配置微擎系统Redis服务(微擎redis如何配置)
- 如何在Win7中正确卸载 Redis(win7卸载redis)
- MySQL查询中,数据不在指定区间内时如何处理(mysql 不在区间内)
- 如何解决MySQL下载后找不到安装文件的问题(mysql下载了找不到)
- MySQL不支持中文输入,如何解决(mysql不支持中文输入)
- 如何查看Redis内存碎片率(如何查看redis碎片率)