一,文档地址:
https://learnku.com/docs/gofiber/2.x/error-handling/11732
二,当出错时,使进程不退出
1,现象
go代码:
func (dc *UserController) GetUser(c *fiber.Ctx) error {
var z int = 0
var i int = 100 / z
fmt.Println("i:%i",i)
// 处理获取用户的逻辑
return c.SendString("获取用户信息")
}
进程会发生crash
panic: runtime error: integer divide by zero
goroutine 18 [running]:
2,如何使进程不退出?
代码:main.go
package main
import (
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/recover"
"industry/routes"
)
func main() {
app := fiber.New()
app.Use(recover.New())
// 设置路由
routes.SetupRoutes(app)
// 启动服务器
err := app.Listen(":3000")
if err != nil {
return
}
}
效果:
三,配置json格式返回错误:
package main
import (
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/recover"
"industry/config"
"industry/routes"
)
func main() {
//app := fiber.New()
app := fiber.New(fiber.Config{
ErrorHandler: func(c *fiber.Ctx, err error) error {
// 状态代码默认为500
code := fiber.StatusInternalServerError
// 如果是fiber.*Error,则检索自定义状态代码。
if e, ok := err.(*fiber.Error); ok {
code = e.Code
}
// 发送自定义错误页面
return c.Status(code).JSON(config.Error("内部错误:"+err.Error()))
},
})
app.Use(recover.New())
// 设置路由
routes.SetupRoutes(app)
// 启动服务器
err := app.Listen(":3000")
if err != nil {
return
}
}