上一章我们讲了如何启动一个 dotweb 程序,本篇文章将介绍如何注册路由。
router 是 dotweb 用来管理路由的结构体,它提供了一些关于路由操作函数。
- app := dotweb.New()
- router := app.HttpServer.Router()
在上一篇文章中我们讲了 dotweb.New() 的用处,HttpServer 负责处理请求,管理路由、session、中间件等等功能。稍后我会介绍 server 对象。在这里我们获取路由对象也是通过 httpserver 获取。一般我们会声明一个函数,在该函数里注册路由,避免在 main 函数里有过多的代码。示例如下:
- func main(){
- app := dotweb.New()
- InitRouter(app.HttpServer)
- app.StartServer(8080)
- }
- func InitRouter(hs *dotweb.HttpServer){
- hs.Router().Get("/index", Index)
- }
- func Index(ctx *dotweb.HttpContext){
- ctx.WitreString("Hello Dotweb!")
- }
在以上示例中我们声明了一个名为 InitRouter 的函数,它将在 main 函数被执行,在 InitRouter 函数里我们注册不同的路由,而 Index 函数被我们成为 UserHandler 它用来处理请求。上述代码将返回 "Hello Dotweb!" 字符串。
- hs.Router().GET("/index", Index) //HttpGet请求
- hs.Router().POST("/post", Post) //HttpPost请求
- hs.Router().HEAD("/head", Head) //HttpHead请求
- hs.Router().OPTIONS("/pptions", Options) //HttpOptions请求
- hs.Router().PUT("/put", Put) //HttpPut请求
- hs.Router().DELETE("/delete", Delete) //httpDelete请求
HTTP 定义的请求方法一共有八种,除了上述六种还有 TRACE 和 CONNECT 两种。大部分场景下我们使用上述六种请求方法就可以满足项目需求,而 RESTful Web API 定义请求方法也不包含 TRACE 和 CONNECT。虽然 dotweb 没有提供 TEACE 和 CONNECT 请求方法,但是它额外提供了四种。
- hs.Router().Any("/any",Any)
Any 函数表示你可以用任何请求方法请求该地址,如果是 GET 函数那么这个地址只能被 GET 方法的请求访问,但如果是 Any 函数你可以用 GET 请求也可以用 POST 请求、PUT 请求等等。
- hs.Router().HiJack("/hijack",Hijack)
HiJack 使用的是 GET 方法请求,但是它又和普通的 GET 请求不同。它一般用于长连接,一般的请求不需要用到它。如果你想要了解更多的 HiJack 使用方法可以参考 dotweb 的姊妹项目—longweb。它为 web 程序提供长连接服务,github 地址:https://github.com/devfeel/longweb。该项目实测百万长连接,如果你有需要可以参考或者使用该项目。它是免费、开源的。
- hs.Router().ServerFile("/img/xxx.jpg", "/webroot/img") //第一个参数表示路由地址,第二个参数表示服务器上文件地址
ServerFile 用来访问静态文件。
- hs.Router().RegisterRoute("WebSocket","/websocket",Websocket)
RegisterRoute 可以注册以上所有类型的路由,方法类型由第一个参数区分,WebSocket 需要用这种方法注册路由。
以上就是 dotweb 提供注册路由的函数,更多的路由注册方式你可以通过阅读源码得知。在此我解释下路由注册函数的两个形参,第一个是 string 类型的参数,它表示路由地址。假设本机地址是 192.168.0.1,端口号为 8080. 如果参数为 "/" 则表示根地址,你输入 192。168.0.1:8080 就可以访问到。如果是 "/index" 它的地址是 192.168.0.1:8080/index。dotweb 还有一种叫做参数路由的路由配置,"/news/:id" 这里的 ":id" 表示一个参数,如果你了解 restful 风格你就会明白这种配置方式的含义,当然这里的参数允许有多个 "/news/:uid/:id"。第二个参数是一个形参为 * dotweb.HttpContext 的函数,它负责处理用户请求,参数表示当前请求的上下文,你可以通过它访问 session、cache、request 等等对象。
需要注意的是 dotweb 有个设置,如果你启动它那么所有非 head 的路由都将会被注册一个 head 方法的路由,它在需要验证请求是否可用的场景下非常有用,下面是启用方法,默认值为 false。
- app.HttpServer.SetEnabledAutoHEAD(true)
接下来我将介绍 UserHandler,如果你有过 javaweb 或者 asp.net mvc 的开发经验那么 UserHandler 非常好理解,它就是控制器中的方法。你可以在这里做简单的 CRUD 也可以做复杂的业务处理,甚至你也可以在这里使用三层的设计。你可以把 UserHandler 都写到一个 go 文件中,也可以按照业务分到不同 go 文件中,事实上我建议你分开。我将在后续文章中介绍 UserHandler 的写法,实际上你掌握了 dotweb.HttpContext 的用法就可以去实现 UserHandler。
当然在 dotweb 中也支持配置文件装载路由,我会在后续文章中专门写一篇介绍如何使用配置文件,在那里我会把 dotweb 的配置相关的介绍一遍。随着 dotweb 受到的关注越来越多更多的人参与到 dotweb 这个项目中来,我们一起努力完善增强 dotweb,在此我希望你也能参与到 dotweb 中来,因为我们需要你的力量。项目地址:https://github.com/devfeel/dotweb,你可以在 github 项目地址中找到我们的官方 QQ 群,我们欢迎你加入 dotweb 大家庭。
来源: http://www.cnblogs.com/BingBoLi/p/6647290.html