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 關注
- 218 瀏覽
添加回答
舉報