亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 golang、gin 和 gorm 與 postgres (如電子郵件)

使用 golang、gin 和 gorm 與 postgres (如電子郵件)

Go
慕森王 2022-10-24 15:20:47
我有這樣的事情,我想檢查數據庫中是否已經存在電子郵件:func RegisterUser(c *gin) {var user models.Userif err := c.ShouldBindJSON(&user); err != nil {    c.JSON(http.StatusBadRequest, gin.H{        "messAge": err.Error(),        "data":    "",    })    return}// **I TRIED SOEMTHING LIKE THIS**err := database.DB.Find(&user.Email).Errorif err != nil {    c.JSON(401, gin.H{"MESSAGE": "Email ALREADY exist",    return}// **but is not working, because ANY mail it give me error**if !strings.Contains(user.Email, "@") {    c.JSON(400, gin.H{"MESSAGE": utils.ErrEmailWrong})    return}if len(user.Password) < 4 {    c.JSON(400, gin.H{"MESSAGE": utils.ErrPasswordLength})    return}database.DB.Create(&user)c.JSON(200, gin.H{    "MESSAGE": "CREATED",})}使用此代碼,每次都告訴我:電子郵件已存在,僅第一次有效。
查看完整描述

4 回答

?
Qyouu

TA貢獻1786條經驗 獲得超11個贊

請閱讀文檔: https ://gorm.io/docs/query.html

var userFind models.User
database.DB.Where("email = ?", user.Email).First(&userFind)



查看完整回答
反對 回復 2022-10-24
?
海綿寶寶撒

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


而且,如果您想通過電子郵件在數據庫中添加記錄,那么您應該刪除唯一約束并在創建記錄時檢查錯誤。如果成功創建記錄,則返回成功響應,否則返回相應的錯誤消息。


查看完整回答
反對 回復 2022-10-24
?
蕪湖不蕪

TA貢獻1796條經驗 獲得超7個贊

它終于工作了!謝謝大家回答!

http://img1.sycdn.imooc.com//63563d0b0001a2ea05280104.jpg


查看完整回答
反對 回復 2022-10-24
?
慕容708150

TA貢獻1831條經驗 獲得超4個贊

  1. 您應該在綁定之后和數據庫查詢之前驗證輸入

  2. 將您的電子郵件列更改為唯一

  3. 嘗試將經過驗證的數據插入到 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


查看完整回答
反對 回復 2022-10-24
  • 4 回答
  • 0 關注
  • 218 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號