1. 程式人生 > >Beego獲取http請求內容詳細介紹

Beego獲取http請求內容詳細介紹

       beego是一個使用 Golang 來設計的快速構建並開發 Go 應用程式的開源http框架,可以快速開發API、Web、後端服務等各種應用,功能支援RESTFul,MVC模型;含有智慧路由,內建強大模組,採用了 Go 原生的 http 包來處理請求;goroutine 的併發效率足以應付大流量的 Web 應用和 API 應用等等,簡單易用,功能強大。

       本文主要介紹beego框架獲取http請求的一些介紹及注意事項。

 

獲取引數


        經常需要獲取使用者傳遞的資料,包括 Get、POST 等方式的請求,beego 裡面會自動解析這些資料,你可以通過如下方式獲取資料:

  1. GetString(key string) string
  2. GetStrings(key string) []string
  3. GetInt(key string) (int64, error)
  4. GetBool(key string) (bool, error)
  5. GetFloat(key string) (float64, error)

使用使用者資訊驗證例子分別採用Get、Post方法舉例如下:

在models中定義返回結構,其中code 含義 1 成功 0 失敗

type GeneralResp struct {
   Code  int         `json:"code"`
   Data  interface{} `json:"data"`
   Error string      `json:"error"`
}

使用Get方法實現使用者資訊驗證介面

func (this *MainController) Login() {
    userName := this.GetString("username")
    passWord := this.GetString("password")
    ret := tools.LoginMsgCheck(userName,passWord)//登入資訊驗證
    if ret == true {
        this.Data["json"] = models.GeneralResp{Code: 1}     
    }else{
        this.Data["json"] = models.GeneralResp{Code: 0, Error: err.Error()}
    }
    this.ServeJSON()
}

如果你需要的資料可能是其他型別的,例如是 int 型別而不是 int64,那麼你需要這樣處理:

func (this *MainController) Get() {
    id := this.Input().Get("id")
    intid, err := strconv.Atoi(id)
}

再使用Post方法完成使用者資訊驗證介面

在models中定義UserInfo結構

type UserInfo struct {
    UserName   string `json:"username"`
    Password   string `json:"password"`
}

Post方法實現使用者資訊驗證介面

func (this *MainController) Login(){
    var userInfo models.UserInfo
    err := json.Unmarshal(this.Ctx.Input.RequestBody, &userInfo )
    if err != nil {
	this.Data["json"] = models.GeneralResp{Code: 0, Error: err.Error()}
	this.ServeJSON()
	return
    }
    ret := tools.LoginMsgCheck(userInfo.UserName,userInfo.PassWord)//登入資訊驗證
    if ret == true {
        this.Data["json"] = models.GeneralResp{Code: 1}     
    }else{
        this.Data["json"] = models.GeneralResp{Code: 0, Error: err.Error()}
    }
    this.ServeJSON()
}

 

更多其他的 request 的資訊,使用者可以通過 this.Ctx.Request 獲取資訊,關於該物件的屬性和方法參考手冊Request。

獲取 Request Body 裡的內容


在 API 的開發中,經常會用到 JSON 或 XML 來作為資料互動的格式,如何在 beego 中獲取 Request Body 裡的 JSON 或 XML 的資料呢?

1、在配置檔案裡設定 copyrequestbody = true
2、在 Controller 中

func (this *ObejctController) Post() {
    var ob models.Object
    json.Unmarshal(this.Ctx.Input.RequestBody, &ob)
    objectid := models.AddOne(ob)
    this.Data["json"] = "{\"ObjectId\":\"" + objectid + "\"}"
    this.ServeJson()
}

注意事項

配置檔案中一定要加copyrequestbody = true

否則會列印錯誤資訊:SyntaxError: Unexpected end of JSON input

 

如有不對歡迎指正,相互學習,共同進步。