首页 > 其他分享 >go fiber:发生内部错误时统一返回json格式

go fiber:发生内部错误时统一返回json格式

时间:2024-11-16 12:44:37浏览次数:1  
标签:fiber err app error json gofiber go New

一,文档地址:

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

四,测试效果 :

标签:fiber,err,app,error,json,gofiber,go,New
From: https://www.cnblogs.com/architectforest/p/18540617

相关文章

  • go fiber: controller返回json格式
    一,代码:1,controller/articleController.gopackagecontrollerimport( "github.com/gofiber/fiber/v2" "industry/config")typeArticleControllerstruct{}funcNewArticleController()*ArticleController{ return&ArticleController{......
  • go fiber:使用独立的routes文件组织controller
    一,go代码:controller/articleController.gopackagecontrollerimport"github.com/gofiber/fiber/v2"typeArticleControllerstruct{}funcNewArticleController()*ArticleController{ return&ArticleController{}}func(dc*ArticleController)......
  • go mod: 配置代理
    一,安装第三方库时报错:没添加代理时,会报错超时错误#goget-ugithub.com/gofiber/fiber/v2go:modulegithub.com/gofiber/fiber/v2:Get"https://proxy.golang.org/github.com/gofiber/fiber/v2/@v/list":dialtcp142.250.217.81:443:i/otimeout 二,解决:编辑/e......
  • go fiber:全局中间件添加排除的path
    一,代码:全局中间件对所有的api生效,如果有个别不想应用全局中间件的api,则需要从代码中进行排除:例如:支付宝或微信的回调接口packagemiddlewareimport( "fmt" "github.com/gofiber/fiber/v2""regexp")funcApiSign(c*fiber.Ctx)error{//得到当前url ......
  • go fiber: 把异常信息写到错误日志中
    一,代码:1,userBusiness.gopackagebusinessimport("fmt")//得到多个用户,按分页返回funcGetUserList(pageint,pageSizeint)(string,error){b:=0a:=100/bfmt.Println(a)return"1,2,3",nil}代码中包含有除0错,会引发panic2,userControlle......
  • golang: 在线上用nginx部署应用
    一,启动应用:1,编译程序$gobuild2,用nohup启动应用的二进制程序$nohup/data/goapp/industry/industry>>/data/logs/gologs/back.log2>&1&[1]48963,检查应用是否启动:$ss-lntp|grep3000LISTEN040960.0.0.0:30000.0.0.0:*users:(("......
  • go fiber: 增加访问日志accesslog
    一,代码这里我们使用官方提供的github.com/gofiber/fiber/v2/middleware/logger这个现成的中间件官方文档地址:https://docs.gofiber.io/api/middleware/logger/routes.gopackageroutesimport( "github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2/middleware/......
  • go fiber: 多个全局中间件的执行顺序
    一,代码:middleware.gopackagemiddlewareimport( "fmt" "github.com/gofiber/fiber/v2")funcMiddle1(c*fiber.Ctx)error{ fmt.Println("middle1before") err:=c.Next() fmt.Println("middle1after") returnerr}......
  • go fiber:路由中间件
    一,目录结构:二,代码1,中间件代码packagemiddlewareimport( "fmt" "github.com/gofiber/fiber/v2" "industry/config")//token校验funcCheckUser(c*fiber.Ctx)error{ token:=c.Query("token") fmt.Println("token:"......
  • django naive datetime问题
    naivedatetime问题,其实就是datetime数据没有携带时间就传递给了模型类现象:D:\anaconda3\envs\schedule_devops\lib\site-packages\django\db\models\fields_init_.py:1367:RuntimeWarning:DateTimeFieldNodeStopRecord.stop_timereceivedanaivedatetime(2024-11-1602:......