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()
}

  

beego 如何自定error的更多相关文章

  1. Golang通过git clone beego框架报错 error: while accessing https://github.com/astaxie/beego/info/refs fatal: HTTP request failed package github.com/astaxie/beego: exit status 128

    在Centos6.4尝试搭建beego框架,使用git命令clone时报错 # cd .; git clone https://github.com/astaxie/beego /www/projec ...

  2. 用html5的视频元素所遇到的第一个坑

    html5 有一个video标签,这个是被大家所熟知的事情.按照w3c的规范,我认真的写出如下代码: <video preload="auto" controls=" ...

  3. golang csv,xls,xlsx

    要用到的包: "golang.org/x/text/encoding/simplifiedchinese"    "golang.org/x/text/transform ...

  4. php源码建博客5--建库建表-配置文件-错误日志

    主要: 整理框架 建库建表 配置文件类 错误日志记录 --------------本篇后文件结构:-------------------------------------- blog ├─App │ ...

  5. golang实现图片上传

    golang实现图片上传 该代码为使用beego实现前后端图片上传.话不多说,直接上代码. 1.前端代码 html代码: <div class="col-5 f-l text text ...

  6. beego 使用连接mysql 报错 register db Ping `default1`, Error 1049: Unknown database 'test_beego' must have one register DataBase alias named `default`

    项目移植到另一台电脑后出现以下问题,及其解决方法: package models import ( "github.com/astaxie/beego/orm" _ "g ...

  7. Beego源码分析(转)

    摘要 beego 是 @astaxie 开发的重量级Go语言Web框架.它有标准的MVC模式,完善的功能模块,和优异的调试和开发模式等特点.并且beego在国内企业用户较多,社区发达和Q群,文档齐全, ...

  8. Go-并发和并行-协程-信道-缓冲信道-select-mutex-读写文件-beego框架

    并发 Go 是并发式语言,而不是并行式语言.在讨论 Go 如何处理并发之前,我们必须理解何为并发,以及并发与并行的区别. 并发是什么? 并发是指立即处理多个任务的能力.一个CPU的情况下<意指看 ...

  9. 对百度WebUploader开源上传控件的二次封装,精简前端代码(两句代码搞定上传)

    前言 首先声明一下,我这个是对WebUploader开源上传控件的二次封装,底层还是WebUploader实现的,只是为了更简洁的使用他而已. 下面先介绍一下WebUploader 简介: WebUp ...

随机推荐

  1. String成员函数

    string类提供的各种操作函数大致分为八类:构造器和析构器,大小和容量,元素存取,字符串比较,字符串修改,字符串接合,I/O操作以及搜索和查找. 函数名称 功能 构造函数 产生或复制字符串 析构函数 ...

  2. CSS基础学习-14 CSS visibility与overflow属性

  3. CSS基础学习-2.CSS选择器(上)

    元素选择符 关系选择符 属性选择符 伪类选择符 伪对象选择符 一.元素选择符 1.通配符:*{ } 2.类选择符:.类名称{ } 3.id选择符::#id名称{ } 4.类型选择符(标签选择符):标签 ...

  4. 下载安装mysql-connector

    执行命令:python -m pip install mysql-connector 测试

  5. 快速取出选中checkbox的值

    原料:jquery 直接上代码 html代码 <html> <head> <title>$Title$</title> </head> &l ...

  6. [TypeScript] @OnChange for ngOnChanges

    Take away from NGCONF talk. It is a good show case to how to use decorator. export interface SimpleC ...

  7. linux中telnet后退出连接窗口

    [root@a cron]# telnet www.baidu.com 80Trying 115.239.211.112...Connected to www.baidu.com.   #显示conn ...

  8. python学习用到的网站

    官方地址:https://www.python.org/ 玩蛇网:http://www.iplaypython.com/

  9. CDOJ 1263 The Desire of Asuna 贪心

    The Desire of Asuna Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Othe ...

  10. java中如何根据函数查询引用的jar包

    选中函数,按Ctrl+Shift+T,就可以弹出对应的jar包地址 例如: