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

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

在 go api 中收到錯誤消息以及結果

在 go api 中收到錯誤消息以及結果

Go
回首憶惘然 2022-10-24 08:50:14
我在 API 中有一條路線,可以讓用戶使用roles. 在這條路線中,如果我輸入用戶的姓名,那么我將獲得所有roles分配給他/她的信息。但問題是它只返回第一個結果。如果該角色存在于另一個對象中,則不會顯示該角色。所以我對該行發表評論return,一切正常,但隨著結果,我收到錯誤消息:"user not found"你們能告訴我我在做什么錯誤嗎?謝謝你。路線 -GET("/users/:username", controllers.GetUserByRole)控制器 -func GetUserByRole(c *gin.Context) {    paramId := c.Param("username")    .............    .............    .............    var newUsers []models.User    iter := client.Collection("users").Documents(ctx)    for {        doc, err := iter.Next()        if err == iterator.Done {            break        }        if err != nil {            log.Fatalf("Failed to iterate: %v", err)        }        var tempUsers models.User        if err := doc.DataTo(&tempUsers); err != nil {            break        }        newUsers = append(newUsers, tempUsers)    }    for _, a := range newUsers {        for _, element := range a.Roles{                if element == paramId {            c.IndentedJSON(http.StatusOK, a)            return     //if I comment this line line then I geting message `"user not found"` along with results        }    }    }    c.IndentedJSON(http.StatusNotFound, gin.H{"message": "user not found"})}URL:http://localhost:3000/users/Analyst響應應該是:  {     "id": 1,     "name": "Leanne Graham",     "username": "Bret",     "roles": ["Developer", "Analyst"],  },  {    "id": 3,    "name": "Clementine Bauch",    "username": "Samantha",    "roles": ["Manger", "Analyst"],  }但我是這樣的(只有第一個匹配的):  {     "id": 1,     "name": "Leanne Graham",     "username": "Bret",     "roles": ["Developer", "Analyst"],  }如果我評論該return行,則響應為(期望的結果 + 錯誤消息):  {     "id": 1,     "name": "Leanne Graham",     "username": "Bret",     "roles": ["Developer", "Analyst"],  },  {    "id": 3,    "name": "Clementine Bauch",    "username": "Samantha",    "roles": ["Manger", "Analyst"],  }{    "message": "album not found"}
查看完整描述

2 回答

?
素胚勾勒不出你

TA貢獻1827條經驗 獲得超9個贊

你可以這樣做


var userList []models.User

for _, a := range newUsers {

    for _, element := range a.AssignedTo {

        if element == paramId {

            userList = append(userList, a)

        }

    }

}

if len(userList) == 0 {

     c.IndentedJSON(http.StatusNotFound, gin.H{"message": "user not found"})

     return

}


c.IndentedJSON(http.StatusOK, userList)


查看完整回答
反對 回復 2022-10-24
?
BIG陽

TA貢獻1859條經驗 獲得超6個贊

看起來你的 return 語句在你的 for 循環中,所以它找到第一個值并立即返回。當您將其注釋掉時,您的函數不會返回,因此它成功完成,然后打印錯誤消息。將 return 語句移到兩個 for 循環之外,應該沒問題。此外,通過錯誤標志添加用于發送錯誤消息的邏輯。還建議使用 Manjeet Thakur 的替代解決方案。


func GetUserByRole(c *gin.Context) {

    paramId := c.Param("username")

    .............

    .............

    .............

    var newUsers []models.User

    iter := client.Collection("users").Documents(ctx)

 

    for {

        doc, err := iter.Next()

        if err == iterator.Done {

            break

        }

        if err != nil {

            log.Fatalf("Failed to iterate: %v", err)

        }

 

        var tempUsers models.User

        if err := doc.DataTo(&tempUsers); err != nil {

            break

        }

        newUsers = append(newUsers, tempUsers)

    }

    var errorflag := 1

    for _, a := range newUsers {

        for _, element := range a.AssignedTo {

                if element == paramId {

            c.IndentedJSON(http.StatusOK, a)

            errorflag := 0

                 //if I comment this line line then I geting message `"user not found"` along with results

        }

    }

    }

    if errorflag{

    c.IndentedJSON(http.StatusNotFound, gin.H{"message": "user not found"})

    }

    return

}


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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