gorm: 记录不存在时的处理

一,遇到记录不存在时,不记录异常到日志

在建立数据库连接时指定配置

var (
	DBLink *gorm.DB
)

func SetupDBLink() (error) {
	var err error

	//IgnoreRecordNotFoundError: false,默认是false,设置为true后不再记录到日志

	//创建日志类
	path:="/data/gologs/logs"
	name:="gormfile"
	mylogger := NewStdFileLogger(FileLogConfig{
		Config: logger.Config{  // gorm日志原始配置项
			SlowThreshold:             200 * time.Millisecond,
			IgnoreRecordNotFoundError: true,
			Colorful:                  true,
		},
	},path,name).LogMode(Info)




	dsn := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=%s&parseTime=%t&loc=Local",
		"root",
		"password",
		"127.0.0.1:3306",
		"basename",
		"utf8",
		true, )

	//DBLink, err = gorm.Open(mysql.Open(dsn), &gorm.Config{Logger: logger.Default.LogMode(logger.Info),})
	DBLink, err = gorm.Open(mysql.Open(dsn),  &gorm.Config{Logger: mylogger,})
	if err != nil {
		return err
	}

	sqlDB, _ := DBLink.DB()

 

二,代码中处理记录不存在的情况:

1,service/articleService.go

//select一个article
func GetOneArticleById(c *gin.Context,id int) (*model.ArticleModel, error) {
	fields := []string{"id", "title","demo","content"}
	articleOne:=&model.ArticleModel{}

	err := global.DBLink.WithContext(c).Select(fields).Where("id=?",id).First(&articleOne).Error
	if errors.Is(err, gorm.ErrRecordNotFound) {
		return nil,err
	} else if err!=nil {
		fmt.Println("service:发生了错误:")
		fmt.Println(err)
		panic(global.CustomError{Code: 1500, Error: err})
		return nil,err
	} else {
		return articleOne,nil
	}
}

2,controller/articleController.go

//得到详情
func (ic *ArticleController) Detail(c *gin.Context) {

	article,err:=service.GetOneArticleById(c,8123)

	if errors.Is(err, gorm.ErrRecordNotFound) {
		c.JSON(http.StatusOK, gin.H{
			"message": "记录不存在",
		})
		return
	} else if err!=nil {
		fmt.Println("==================controller中err:",err)
		c.JSON(http.StatusInternalServerError, gin.H{
			"message": err.Error(),
		})
		return
	} else {
		c.JSON(http.StatusOK, gin.H{
			"message": article.Content,
		})
		return
	}


}

3,测试效果:

 

posted @ 2025-02-09 19:16  刘宏缔的架构森林  阅读(63)  评论(0)    收藏  举报