路由注册

这里使用了分组路由的注册方式,分组路由也是推荐的路由注册方式。由于gf-demos项目包含其他的示例功能,因此该路由中包含了其他的一些路由注册项,仅供参考。

https://github.com/gogf/gf-demos/blob/master/router/router.go

  1. package router
  2. import (
  3. "github.com/gogf/gf-demos/app/api/chat"
  4. "github.com/gogf/gf-demos/app/api/curd"
  5. "github.com/gogf/gf-demos/app/api/user"
  6. "github.com/gogf/gf-demos/app/service/middleware"
  7. "github.com/gogf/gf/frame/g"
  8. "github.com/gogf/gf/net/ghttp"
  9. )
  10. // 你可以将路由注册放到一个文件中管理,
  11. // 也可以按照模块拆分到不同的文件中管理,
  12. // 但统一都放到router目录下。
  13. func init() {
  14. s := g.Server()
  15. // 某些浏览器直接请求favicon.ico文件,特别是产生404时
  16. s.SetRewrite("/favicon.ico", "/resource/image/favicon.ico")
  17. // 分组路由注册方式
  18. s.Group("/", func(group *ghttp.RouterGroup) {
  19. ctlChat := new(chat.Controller)
  20. ctlUser := new(user.Controller)
  21. group.Middleware(middleware.CORS)
  22. group.ALL("/chat", ctlChat)
  23. group.ALL("/user", ctlUser)
  24. group.ALL("/curd/:table", new(curd.Controller))
  25. group.Group("/", func(group *ghttp.RouterGroup) {
  26. group.Middleware(middleware.Auth)
  27. group.ALL("/user/profile", ctlUser, "Profile")
  28. })
  29. })
  30. }

可以看到,我们的路由注册管理也使用了包初始化方法init,这样做的好处是可以在router目录中使用不同的go文件注册不同的init来分别实现不同的路由注册。当项目的路由比较多的时候,可以采用不同的go文件管理不同的路由,这在团队协作的项目中也比较方便。

如果您对HTTP Method没有特殊的需求,建议统一使用ALL方法注册路由,使得该路由可以被任意的HTTP Method访问。特别是在跨域场景中,可能会同一个路由接口需要同时满足POSTOPTIONS请求,这种情况只有使用ALL方法注册路由。

该路由的配置中,所有接口均绑定了middleware.CORS允许跨域请求的中间件。而只有/user/profile路由需要鉴权控制。