一架梯子,一头程序猿,仰望星空!
Beego 框架面试题 > 内容正文

Beego 如何自定义错误处理,统一返回json错误格式数据?


问题简答

beego开发过程中可以有下面几种方式自定义错误处理机制,统一返回json数据格式:
1、定义一个BaseController, 自定义Abort方法,统一处理错误信息返回,后续业务只要调用Abort方法抛出错误信息即可。
2、自定义中间件(在beego中叫Filter),在中间件中统一处理错误,并将错误信息以 JSON 格式返回。
3、通过beego内置的自定义错误处理机制,自定义ErrorController,自定各种http错误码的处理函数。

问题详解:

1、下面是一个自定义Abort方法,实现统一错误处理的例子

package controllers

import "github.com/astaxie/beego"

type BaseController struct {
    beego.Controller
}

// 自定义Abort, 统一返回错误数据
func (c *BaseController) Abort(code int, message string) {
    c.Data["json"] = map[string]interface{}{
        "code":    code,
        "message": message,
    }
    c.ServeJSON()
    c.StopRun()
}

2、使用controller基类,主动抛出错误

package controllers

type UserController struct {
    // 自定义基类
    BaseController
}

func (c *UserController) Get() {
    // 获取参数
    id, err := c.GetInt("id")
    if err != nil {
        // 抛出错误信息
        c.Abort(400, "Invalid parameter: id")
    }

    // 查询用户信息
    user, err := models.GetUserById(id)
    if err != nil {
        // 抛出错误信息
        c.Abort(500, "Failed to get user")
    }

    c.Data["json"] = user
    c.ServeJSON()
}

其他错误处理机制,请参考:beego 错误处理