对于写接口来说,每次服务器崩了,都要查看控制台找问题太繁琐了,而且默认前端返回的是html文本太不友好,在入口文件加入panic的捕获,并通过recover恢复,执行json返回正常格式的数据。
配置方法:main.go 入口文件内加入
web.BConfig.RecoverPanic = true
web.BConfig.RecoverFunc = RecoverPanic
web.Run()
在web.Run()之前加入即可,RecoverPanic内容如下,请自行修改为自己所需要的格式
func RecoverPanic(ctx *context.Context, config *web.Config) {
if err := recover(); err != nil {
ctx.ResponseWriter.Header().Set("Access-Control-Allow-Origin", ctx.Request.Header.Get("Origin"))
var stack []string
for i := 1; ; i++ {
_, file, line, ok := runtime.Caller(i)
if !ok {
break
}
//logs.Critical(fmt.Sprintf("%s:%d", file, line))
stack = append(stack, fmt.Sprintln(fmt.Sprintf("%s:%d", file, line)))
}
//显示错误
data := map[string]interface{}{
"ret": 4000,
"AppError": fmt.Sprintf("%v", err),
"RequestMethod": ctx.Input.Method(),
"RequestURL": ctx.Input.URI(),
"RemoteAddr": ctx.Input.IP(),
"Stack": stack,
"BeegoVersion": beego.VERSION,
"GoVersion": runtime.Version(),
}
_ = ctx.Output.JSONdata true, true)
if ctx.Output.Status != 0 {
ctx.ResponseWriter.WriteHeader(ctx.Output.Status)
} else {
ctx.ResponseWriter.WriteHeader(500)
}
}
}