1. 程式人生 > 其它 >(七)Beego控制器之響應請求

(七)Beego控制器之響應請求

我們處理完使用者的請求之後,通常我們都會返回html程式碼,然後瀏覽器就可以顯示html內容;除了返回html,在api介面開發中,我們還可以返回json、xml、jsonp格式的資料。
下面分別介紹beego返回不同資料型別的處理方式。

注意:如果使用beego開發api,那麼在app.conf中設定AutoRender = false, 禁止自動渲染模板,否則beego每次處理請求都會嘗試渲染模板,如果模板不存在則報錯。

一、返回json資料

下面是返回json資料的例子:

// 定義struct
// 如果struct欄位名跟json欄位名不一樣,可以使用json標籤,指定json欄位名
type User struct {
    // - 表示忽略id欄位
	Id       int	`json:"-"`
	Username string `json:"name"`
	Phone    string
}

func (this *UserController) Get() {
    // 定義需要返回給客戶端的資料
    user := User{1, "tizi365", "13089818901"}
    
    // 將需要返回的資料賦值給json欄位
    this.Data["json"] = &user
    
    // 將this.Data["json"]的資料,序列化成json字串,然後返回給客戶端
    this.ServeJSON()
}
提示:請參考Go處理json資料教程,瞭解詳細的json資料處理方式。

二、返回XML資料

下面是返回xml資料的處理方式跟json類似。
例子:

// 定義struct
// 如果struct欄位名跟xml欄位名不一樣,可以使用xml標籤,指定xml欄位名
type User struct {
    // - 表示忽略id欄位
	Id       int	`xml:"-"`
	Username string `xml:"name"`
	Phone    string
}

func (this *UserController) Get() {
    // 定義需要返回給客戶端的資料
    user := User{1, "tizi365", "13089818901"}
    
    // 將需要返回的資料賦值給xml欄位
    this.Data["xml"] = &user
    
    // 將this.Data["xml"]的資料,序列化成xml字串,然後返回給客戶端
    this.ServeXML()
}
提示:請參考Go處理xml資料教程,瞭解詳細的xml資料處理方式。

三、返回jsonp資料

返回jsonp資料,於返回json資料方式類似。
例子:

func (this *UserController) Get() {
    // 定義需要返回給客戶端的資料
    user := User{1, "tizi365", "13089818901"}
    
    // 將需要返回的資料賦值給jsonp欄位
    this.Data["jsonp"] = &user
    
    // 將this.Data["json"]的資料,序列化成json字串,然後返回給客戶端
    this.ServeJSONP()
}

4.返回html

如果我們開發的是網頁,那麼通常需要返回html程式碼,在beego專案中關於html檢視部分,使用的是模板引擎技術,渲染html,然後將結果返回給瀏覽器。
例子:

func (c *MainController) Get() {
    // 設定模板引數
	c.Data["Website"] = "tizi365.com"
	c.Data["Email"] = "[email protected]"
	
	// 需要渲染的模板, beego會渲染這個模板,然後返回結果
	c.TplName = "index.tpl"
}

5.新增響應頭

為http請求新增header

func (c *MainController) Get() {
    // 通過this.Ctx.Output.Header設定響應頭
    this.Ctx.Output.Header("Content-Type", "message/http")
    this.Ctx.Output.Header("Cache-Control", "no-cache, no-store, must-revalidate")
}
提示:後續會有關於beego檢視開發的詳細的教程。