我想根据返回的数据库错误返回适当的HTTP状态代码。 例如,如果找不到记录,我发送404,如果是其他的话 - 500,依此类推......
目前,我只是从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
类型的正确方法。
谢谢。
答案 0 :(得分:1)
执行错误的类型切换。在每个case语句中,错误都是任何类型的,因此您可以访问它可能具有的任何字段,例如错误消息。
func (s *State) Index(c *gin.Context) {
res, err := s.DB.GetArticles()
if err != nil {
switch err.(type){
case ErrNotFound:
d := gin.H{
"error": gin.H{
"status": "404",
"title": "Get record error!",
"detail": err.Error(),
},
}
c.JSON(404, d)
case *QueryError:
//how you want to deal with a queryError
case *LastError:
//how you want to deal with a LastError
}
}
content := gin.H{
"data": gin.H{
"type": "records",
"id": res.Id,
"attributes": gin.H{
"Phone": res.Phone,
},
},
}
c.JSON(200, content)
}