上一章我们讲了如何启动一个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大家庭。

dotweb——go语言的一个微型web框架(三)路由注册的更多相关文章

  1. dotweb——go语言的一个微型web框架(一)

    dotweb是16年正式托管到github的一个开源项目,go语言的web框架目前也有很多,出名的有bee和echo.它们都是很优秀的框架,但是我们喜欢更轻.更小的东西,经历一些之后我们更青睐微服务这 ...

  2. dotweb——go语言的一个微型web框架(二)启动dotweb

    以上的代码截图表示启动一个dotweb服务,在浏览器里输入127.0.0.1:8080,将会得到一个"index"的页面. app := dotweb.New() dotweb.N ...

  3. 【Flask】微型web框架flask大概介绍

    Flask Flask是一个基于python的,微型web框架.之所以被称为微型是因为其核心非常简单,同时具有很强的扩展能力.它几乎不给使用者做任何技术决定. 安装flask时应该注意其必须的几个支持 ...

  4. .NET的微型Web框架 Nancy

    .NET的微型Web框架 Nancy .NET的微型Web框架 Nancy   大部分微软平台的开发人员如果选择开发框架只能是在ASP.NET WEBFORM和ASP.NET MVC两个之间选择. 而 ...

  5. 笔记:学习go语言的网络基础库,并尝试搭一个简易Web框架

    在日常的 web 开发中,后端人员常基于现有的 web 框架进行开发.但单纯会用框架总感觉不太踏实,所以有空的时候还是看看这些框架是怎么实现的会比较好,万一要排查问题也快一些. 最近在学习 go 语言 ...

  6. 运行第一个Go Web框架

    GO 语言的web框架很多,相对来说, Beego 框架,入门简单,文档齐全(中文),功能强大,本文以Beego 示例. Beego提供了详细的开发文档:http://beego.me/docs/in ...

  7. 探讨后端选型中不同语言及对应的Web框架

    在进行后端选型的时候,实际上我们要选择的是一个框架.后端领域所使用的技术和框架已经趋于稳定,我们只需要按我们的需要选择所需要的框架.当存在多个框架适合时,我们再选择适合的语言.不得不指出的是,当我们喜 ...

  8. 选择一个 Python Web 框架:Django vs Flask vs Pyramid

    Pyramid, Django, 和 Flask都是优秀的框架,为项目选择其中的哪一个都是伤脑筋的事.我们将会用三种框架实现相同功能的应用来更容易的对比三者.也可以直接跳到框架实战(Framework ...

  9. [Python之路] 使用装饰器给Web框架添加路由功能(静态、动态、伪静态URL)

    一.观察以下代码 以下来自 Python实现简易HTTP服务器与MINI WEB框架(利用WSGI实现服务器与框架解耦) 中的mini_frame最后版本的代码: import time def in ...

随机推荐

  1. 开发mis系统的技术

    一.b/s架构 b/s架构:就broser/server,浏览器/服务器的说法.服务器端要运行tomcat,提供链接数据库服务供java代码读写数据,这个可以在eclipse中配置运行.浏览器则解释j ...

  2. 深入浅出妙用 Javascript 中 apply、call、bind

    这篇文章实在是很难下笔,因为网上相关文章不胜枚举. 巧合的是前些天看到阮老师的一篇文章的一句话: "对我来说,博客首先是一种知识管理工具,其次才是传播工具.我的技术文章,主要用来整理我还不懂 ...

  3. webkit 渲染机制

    最近看了< webkit技术内幕 >,虽然并不能完全看懂,但是对浏览器的渲染机制也算是有了一个比较完整的认识. 我们从浏览器地址栏输入网址开始到web页面被完整的呈现在眼前,大概的经过了这 ...

  4. OpenGl编程指南第7版(红宝书)环境配制

    环境 OS:win7 旗舰版SP1 64位 编译器: VS 2013 express 的cl 软件 glut. 在这个页面https://www.opengl.org/resources/librar ...

  5. groovy学习(四)io

    package ch5 numbers = [11, 12, 13, 14]def staffTel = ['Ken' : 2745, 'John' : 2746, 'Jessie' : 2772]p ...

  6. jQuery DataTable 删除数据后重新加载

    问题描述: 利用jQuery Datatable和artTemplate组合来做的表格.但是当删除数据时,需要重新加载table里的数据.但是问题是datatable并没有直接的重新渲染,反而给数据累 ...

  7. 【Zookeeper】源码分析之网络通信(三)

    一.前言 前面已经学习了NIOServerCnxn,接着继续学习NettyServerCnxn. 二.NettyServerCnxn源码分析 2.1 类的继承关系 public class Netty ...

  8. 最强 IDE Visual Studio 2017 正式版发布

    Visual Studio 2017 正式版发布,该版本不仅添加了实时单元测试.实时架构依赖关系验证等新特性,还对许多实用功能进行了改进,如代码导航.IntelliSense.重构.代码修复和调试等等 ...

  9. php 实现购物车功能,以大苹果购物网为例,上图上代码。。。。

    首先是几个简单的登录页面 <body> <form action="chuli.php" method="post"> <div ...

  10. WebLogic写的网络爬虫

    一.前言 最近因为有爬一些招聘网站的招聘信息的需要,而我之前也只是知道有"网络爬虫"这个神奇的名词,具体是什么.用什么实现.什么原理.如何实现比较好都不清楚,因此最近大致研究了一下 ...