Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

可以看到,我们可以使用BindStatusHandler或者BindStatusHandlerMap来实现针对指定的状态码进行自定义的回调函数处理,并且该特性也支持针对特定的域名绑定。我们来看几个简单的示例。

基本使用

package main

import (
    "github.com/gogf/gf/frame/g"
    "github.com/gogf/gf/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()
}

...

执行后,我们手动通过浏览器访问一个不存在的页面,例如 http://127.0.0.1:8199/test ,可以看到,页面被引导跳转到了 http://127.0.0.1:8199/status/404 页面,并且可以看到页面返回内容:woops, status 404 found

批量设置

package main

import (
    "github.com/gogf/gf/frame/g"
    "github.com/gogf/gf/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方法对需要自定义的状态码进行批量设置。该示例程序执行后,当服务接口返回的状态码为403/404/500时,接口将会返回对应的状态码数字。

注意事项

在自定义状态码处理方法中如果涉及到内容的输出,往往需要使用r.Response.ClearBuffer()方法将原本缓冲区的输出内容清空。