返されたDBエラーに応じて適切なHTTPステータスコードを返したいと思います。 たとえば、レコードが見つからない場合は、何か他の場合、つまり404などを送信します。Golang、mongodb:データベースエラーの詳細/コードを取得する
現時点では、私はちょうど標準error
をmgoから取得します。 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エラー応答には、実際のDBエラーの詳細フィールドと、HTTPステータスコードのステータスフィールドがあります。 HTTPステータスコードは、DBエラーに基づいて決定する必要があります。
したがって、私はswitch
で正しいHTTPステータスを返すことができるように、intエラーコードで詳細なエラーを取得しますか?
ドキュメントにはQueryError
とLastError
が表示されていますが、返品方法はわかりません。この質問は、QueryError
とLastError
タイプの正しい使い方になっていると思います。
ありがとうございます。
あなたの助けをいただき、ありがとうございます。しかし、それはコンパイルされません。エラー: "不可能なタイプのスイッチの場合:エラー(型エラー)は動的型を持つことができません。mgo.QueryError(エラーメソッドがありません)"考えていますか?これらのエラーコードをDB形式で取得することは非常に難しいとは思えません。 –
QueryErrorが必要なように見えます。* QueryErrorとLastErrorは* LastErrorである必要があります。私はコードを更新しました –
ええ、ありがとう。私はそれを理解しました..今は動作しますが、私はまだそれらのDBエラーコードを取得できません。任意のエラーシミュレーション私は、単に "見つかりません"のような文字列エラーを返します。 'LastError'や' QuerryError'を返しません。これら2つの構造体には、必要なコードフィールドがあり、私はそれらにアクセスできません。 –