0
我想根據返回的數據庫錯誤返回適當的HTTP狀態代碼。 例如,如果沒有找到記錄,我會發送404,如果它是別的 - 500,等等......Golang,mongodb:獲取數據庫錯誤的詳細信息/代碼
目前,我只是從mgo獲得標準error
類型。 如何獲得一個int錯誤代碼,以便我可以分析它並返回相應的HTTP代碼?
實施例:
func (db *DB) GetRecord() (*Person, error) {
c := db.C("people")
res := Person{}
err := c.Find(bson.M{"name": "Alexandra"}).One(&res)
if err != nil {
return nil, err
}
return &res, nil
}
所以這個函數只得到一個記錄,並返回一個錯誤(在故障的情況下),其被螺紋連接至HTTP處理程序。
func (s *State) Index(c *gin.Context) {
res, err := s.DB.GetArticles()
if err != nil {
d := gin.H{
"error": gin.H{
"status": "404",
"title": "Get record error!",
"detail": err.Error(),
},
}
c.JSON(404, d)
}
content := gin.H{
"data": gin.H{
"type": "records",
"id": res.Id,
"attributes": gin.H{
"Phone": res.Phone,
},
},
}
c.JSON(200, content)
}
的JSON錯誤回覆具有用於HTTP狀態代碼的實際DB的錯誤和狀態字段的細節字段。 HTTP狀態代碼必須根據數據庫錯誤來確定。
那麼如何獲得一個int錯誤代碼的詳細錯誤,所以我可以通過它switch
並返回正確的HTTP狀態?
我可以在文檔中看到QueryError
和LastError
,但我無法弄清楚如何返回它們。我想這個問題歸結爲使用QueryError
和LastError
類型的正確方法。
謝謝。
謝謝您的幫助。但它不編譯。它錯誤了:「不可能類型切換的情況下:錯誤(類型錯誤)不能有動態類型mgo.QueryError(缺少錯誤方法)」任何想法?我無法相信從DB –
那裏得到這些錯誤代碼是非常困難的。它看起來像QueryError需要* QueryError和LastError需要是* LastError。我已更新代碼 –
是的,謝謝。我想明白了..它現在可以工作,但我仍然無法獲得這些數據庫錯誤代碼。我做的任何錯誤模擬,它只是返回一個字符串錯誤,如「找不到」。它永遠不會返回'LastError'或'QuerryError'。這兩個結構具有我需要的Code字段,我無法與他們聯繫。 –