From f9ae74ab9960027b0bfadc1ceaca2adebe6a9b0d Mon Sep 17 00:00:00 2001 From: nickhsine Date: Wed, 5 Feb 2020 12:43:40 +0800 Subject: [PATCH] fix: handle url query parsing failure --- controllers/author.go | 2 +- controllers/news.go | 4 ++-- controllers/post.go | 14 ++++++++++++-- controllers/topic.go | 13 +++++++++++-- 4 files changed, 26 insertions(+), 7 deletions(-) diff --git a/controllers/author.go b/controllers/author.go index 77fc847f..3f38fcbb 100644 --- a/controllers/author.go +++ b/controllers/author.go @@ -17,7 +17,7 @@ func (nc *NewsController) GetAuthors(c *gin.Context) (int, gin.H, error) { var err error var total int - _, limit, offset, sort, _ := nc.GetQueryParam(c) + _, _, limit, offset, sort, _ := nc.GetQueryParam(c) if limit == 0 { limit = defaultLimit diff --git a/controllers/news.go b/controllers/news.go index f4dbafb0..ef26252d 100644 --- a/controllers/news.go +++ b/controllers/news.go @@ -19,7 +19,7 @@ func NewNewsController(s storage.NewsStorage) *NewsController { } // GetQueryParam pares url param -func (nc *NewsController) GetQueryParam(c *gin.Context) (mq models.MongoQuery, limit int, offset int, sort string, full bool) { +func (nc *NewsController) GetQueryParam(c *gin.Context) (err error, mq models.MongoQuery, limit int, offset int, sort string, full bool) { where := c.Query("where") _limit := c.Query("limit") _offset := c.Query("offset") @@ -43,7 +43,7 @@ func (nc *NewsController) GetQueryParam(c *gin.Context) (mq models.MongoQuery, l where = "{}" } - _ = models.GetQuery(where, &mq) + err = models.GetQuery(where, &mq) return } diff --git a/controllers/post.go b/controllers/post.go index 8f8d1dd0..b119adc7 100644 --- a/controllers/post.go +++ b/controllers/post.go @@ -4,6 +4,7 @@ import ( "net/http" "strconv" + //log "github.com/Sirupsen/logrus" "github.com/gin-gonic/gin" "twreporter.org/go-api/models" ) @@ -14,9 +15,18 @@ import ( func (nc *NewsController) GetPosts(c *gin.Context) { var total int var posts []models.Post - var err error - mq, limit, offset, sort, full := nc.GetQueryParam(c) + err, mq, limit, offset, sort, full := nc.GetQueryParam(c) + + // response empty records if parsing url query param occurs error + if err != nil { + c.JSON(http.StatusOK, gin.H{"status": "ok", "records": posts, "meta": models.MetaOfResponse{ + Total: total, + Offset: offset, + Limit: limit, + }}) + return + } if limit == 0 { limit = 10 diff --git a/controllers/topic.go b/controllers/topic.go index 4d5cc54f..764c56d8 100644 --- a/controllers/topic.go +++ b/controllers/topic.go @@ -14,9 +14,18 @@ import ( func (nc *NewsController) GetTopics(c *gin.Context) { var total int var topics []models.Topic - var err error - mq, limit, offset, sort, full := nc.GetQueryParam(c) + err, mq, limit, offset, sort, full := nc.GetQueryParam(c) + + // response empty records if parsing url query param occurs error + if err != nil { + c.JSON(http.StatusOK, gin.H{"status": "ok", "records": topics, "meta": models.MetaOfResponse{ + Total: total, + Offset: offset, + Limit: limit, + }}) + return + } if limit == 0 { limit = 10