GoFrame 數(shù)據(jù)返回-緩沖控制

2022-04-14 09:27 更新

?Response?輸出采用了緩沖控制,輸出的內(nèi)容預(yù)先寫入到一塊緩沖區(qū),等待服務(wù)方法執(zhí)行完畢后才真正地輸出到客戶端。該特性在提高執(zhí)行效率同時(shí)為輸出內(nèi)容的控制提供了更高的靈活性。

相關(guān)方法:

func (r *Response) Buffer() []byte
func (r *Response) BufferLength() int
func (r *Response) BufferString() string
func (r *Response) Flush()
func (r *Response) SetBuffer(data []byte)

其中?Output?作用類似于?Flush?將緩沖區(qū)的數(shù)據(jù)輸出到客戶端并清空緩沖區(qū)。

舉個(gè)例子:

我們通過后置中間件統(tǒng)一對(duì)返回的數(shù)據(jù)做處理,如果服務(wù)方法產(chǎn)生了異常,那么不能將敏感錯(cuò)誤信息推送到客戶端,而統(tǒng)一設(shè)置錯(cuò)誤提示信息。

package main

import (
	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/net/ghttp"
	"net/http"
)

func MiddlewareErrorHandler(r *ghttp.Request) {
	r.Middleware.Next()
	if r.Response.Status >= http.StatusInternalServerError {
		r.Response.ClearBuffer()
		r.Response.Writeln("服務(wù)器居然開小差了,請(qǐng)稍后再試吧!")
	}
}

func main() {
	s := g.Server()
	s.Group("/api.v2", func(group *ghttp.RouterGroup) {
		group.Middleware(MiddlewareErrorHandler)
		group.ALL("/user/list", func(r *ghttp.Request) {
			panic("db error: sql is xxxxxxx")
		})
	})
	s.SetPort(8199)
	s.Run()
}

訪問 http://127.0.0.1:8199/api.v2/user/list 可以看到,頁面輸出了:

服務(wù)器居然開小差了,請(qǐng)稍后再試吧!


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)