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,测试效果: