4 回答
TA贡献1786条经验 获得超11个赞
请阅读文档: https ://gorm.io/docs/query.html
var userFind models.User database.DB.Where("email = ?", user.Email).First(&userFind)
TA贡献1809条经验 获得超8个赞
因为,您的 struct 对象不是切片。你应该使用ErrRecordNotFound.
注意:ErrRecordNotFound仅适用于First, Last,Take预计会返回一些结果。并RecordNotFound在 V2 中删除。
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound){
c.JSON(401, gin.H{"MESSAGE": "Email Not Found",
return
}
c.JSON(401, gin.H{"MESSAGE": "Your Message",
return
}
或者
如果你想避免这个错误ErrRecordNotFound,你可以使用Findlike方法接受结构和切片数据。并像这样检查:db.Limit(1).Find(&user),Find
result.RowsAffected // returns count of records found
为了更好地理解,请参阅此处的链接:https ://gorm.io/docs/v2_release_note.html#ErrRecordNotFound和https://gorm.io/docs/query.html
而且,如果您想通过电子邮件在数据库中添加记录,那么您应该删除唯一约束并在创建记录时检查错误。如果成功创建记录,则返回成功响应,否则返回相应的错误消息。
TA贡献1831条经验 获得超4个赞
您应该在绑定之后和数据库查询之前验证输入
将您的电子邮件列更改为唯一
尝试将经过验证的数据插入到 db
如果成功 => 200(没有类似的电子邮件)
if err => 检查错误码
例如:
func IsUniqueContraintViolation(err error) bool {
if pgError, ok := err.(*pgconn.PgError); ok && errors.Is(err, pgError) {
if pgError.Code == "23505" {
return true
}
}
return false
}
有关更多信息,您应该查看GoDoc pg lib和可能的错误代码
,然后您可以返回合适的错误代码
顺便提一句。希望您不要将清晰的密码保存到数据库:D
- 4 回答
- 0 关注
- 168 浏览
添加回答
举报