新聞中心
我們可以對?WebServer?指定的狀態(tài)碼進(jìn)行自定義處理,例如針對常見的?404/403/500?等錯誤,我們可以展示自定義的錯誤信息、頁面內(nèi)容,或者跳轉(zhuǎn)到一個特定的頁面。

專業(yè)成都網(wǎng)站建設(shè)公司,做排名好的好網(wǎng)站,排在同行前面,為您帶來客戶和效益!創(chuàng)新互聯(lián)為您提供成都網(wǎng)站建設(shè),五站合一網(wǎng)站設(shè)計(jì)制作,服務(wù)好的網(wǎng)站設(shè)計(jì)公司,成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作負(fù)責(zé)任的成都網(wǎng)站制作公司!
相關(guān)方法如下:
func (s *Server) BindStatusHandler(status int, handler HandlerFunc)
func (s *Server) BindStatusHandlerByMap(handlerMap map[int]HandlerFunc)
func (d *Domain) BindStatusHandler(status int, handler HandlerFunc)
func (d *Domain) BindStatusHandlerByMap(handlerMap map[int]HandlerFunc)可以看到,我們可以使用?BindStatusHandler?或者?BindStatusHandlerMap?來實(shí)現(xiàn)針對指定的狀態(tài)碼進(jìn)行自定義的回調(diào)函數(shù)處理,并且該特性也支持針對特定的域名綁定。我們來看幾個簡單的示例。
基本使用
package main
import (
"github.com/GOgf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/ghttp"
)
func main() {
s := g.Server()
s.BindHandler("/", func(r *ghttp.Request){
r.Response.Writeln("halo 世界!")
})
s.BindStatusHandler(404, func(r *ghttp.Request){
r.Response.Writeln("This is customized 404 page")
})
s.SetPort(8199)
s.Run()
}執(zhí)行后,我們訪問沒有綁定的路由頁面,例如 http://127.0.0.1:8199/test ,可以看到,頁面顯示了我們期望的返回結(jié)果:?This is customized 404 page?。
此外,常見的Web頁面請求錯誤狀態(tài)碼處理方式,是引導(dǎo)用戶跳轉(zhuǎn)到指定的錯誤頁面,因此,在狀態(tài)碼回調(diào)處理函數(shù)中,我們可以使用?r.RedirectTo?方法來進(jìn)行頁面跳轉(zhuǎn),示例如下:
package main
import (
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/ghttp"
)
func main() {
s := g.Server()
s.BindHandler("/status/:status", func(r *ghttp.Request) {
r.Response.Write("woops, status ", r.Get("status"), " found")
})
s.BindStatusHandler(404, func(r *ghttp.Request){
r.Response.RedirectTo("/status/404")
})
s.SetPort(8199)
s.Run()
}執(zhí)行后,我們手動通過瀏覽器訪問一個不存在的頁面,例如 http://127.0.0.1:8199/test ,可以看到,頁面被引導(dǎo)跳轉(zhuǎn)到了 http://127.0.0.1:8199/status/404 頁面,并且可以看到頁面返回內(nèi)容:?woops, status 404 found?
批量設(shè)置
package main
import (
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/ghttp"
)
func main() {
s := g.Server()
s.BindStatusHandlerByMap(map[int]ghttp.HandlerFunc {
403 : func(r *ghttp.Request){r.Response.Writeln("403")},
404 : func(r *ghttp.Request){r.Response.Writeln("404")},
500 : func(r *ghttp.Request){r.Response.Writeln("500")},
})
s.SetPort(8199)
s.Run()
}可以看到,我們可以通過?BindStatusHandlerByMap?方法對需要自定義的狀態(tài)碼進(jìn)行批量設(shè)置。該示例程序執(zhí)行后,當(dāng)服務(wù)接口返回的狀態(tài)碼為?403/404/500?時(shí),接口將會返回對應(yīng)的狀態(tài)碼數(shù)字。
注意事項(xiàng)
在自定義狀態(tài)碼處理方法中如果涉及到內(nèi)容的輸出,往往需要使用?r.Response.ClearBuffer()?方法將原本緩沖區(qū)的輸出內(nèi)容清空。
分享文章:創(chuàng)新互聯(lián)GoFrame教程:GoFrame高級特性-自定義狀態(tài)碼處理
網(wǎng)站URL:http://fisionsoft.com.cn/article/dpdigis.html


咨詢
建站咨詢
