• 基本使用
  • 批量设置

    我们可以对Web Server指定的状态码进行自定义处理,例如针对常见的404/403/500等错误,我们可以展示自定义的错误信息、页面内容,或者跳转到一个特定的页面。

    相关方法如下:

    1. func (s *Server) BindStatusHandler(status int, handler HandlerFunc)
    2. func (s *Server) BindStatusHandlerByMap(handlerMap map[int]HandlerFunc)
    3. func (d *Domain) BindStatusHandler(status int, handler HandlerFunc)
    4. func (d *Domain) BindStatusHandlerByMap(handlerMap map[int]HandlerFunc)

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

    基本使用

    1. package main
    2. import (
    3. "github.com/gogf/gf/g"
    4. "github.com/gogf/gf/g/net/ghttp"
    5. )
    6. func main() {
    7. s := g.Server()
    8. s.BindHandler("/", func(r *ghttp.Request){
    9. r.Response.Writeln("halo 世界!")
    10. })
    11. s.BindStatusHandler(404, func(r *ghttp.Request){
    12. r.Response.Writeln("This is customized 404 page")
    13. })
    14. s.SetPort(8199)
    15. s.Run()
    16. }

    执行后,我们访问没有绑定的路由页面,例如http://127.0.0.1:8199/test,可以看到,页面显示了我们期望的返回结果:This is customized 404 page

    此外,常见的Web页面请求错误状态码处理方式,是引导用户跳转到指定的错误页面,因此,在状态码回调处理函数中,我们可以使用r.RedirectTo方法来进行页面跳转,示例如下:

    1. package main
    2. import (
    3. "github.com/gogf/gf/g"
    4. "github.com/gogf/gf/g/net/ghttp"
    5. )
    6. func main() {
    7. s := g.Server()
    8. s.BindHandler("/status/:status", func(r *ghttp.Request) {
    9. r.Response.Write("woops, status ", r.Get("status"), " found")
    10. })
    11. s.BindStatusHandler(404, func(r *ghttp.Request){
    12. r.Response.RedirectTo("/status/404")
    13. })
    14. s.SetPort(8199)
    15. s.Run()
    16. }

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

    批量设置

    1. package main
    2. import (
    3. "github.com/gogf/gf/g"
    4. "github.com/gogf/gf/g/net/ghttp"
    5. )
    6. func main() {
    7. s := g.Server()
    8. s.BindStatusHandlerByMap(map[int]ghttp.HandlerFunc {
    9. 403 : func(r *ghttp.Request){r.Response.Writeln("403")},
    10. 404 : func(r *ghttp.Request){r.Response.Writeln("404")},
    11. 500 : func(r *ghttp.Request){r.Response.Writeln("500")},
    12. })
    13. s.SetPort(8199)
    14. s.Run()
    15. }

    可以看到,我们可以通过BindStatusHandlerByMap方法对需要自定义的状态码进行批量设置。该示例程序执行后,当服务接口返回的状态码为403/404/500时,接口将会返回对应的状态码数字。