}) n := negroni.Classic() n.UseHandler(mux) http.ListenAndServe(":3000", n) } negroni的使用非常简单 negroni.Classic()提供了几个常用的中间件: negroni.Recovery:恢复panic,处理器代码中有panic会被这个中间件捕获,程序不会退出; negroni.Logger:日志 在调用n.Use时使用了negroni.HandlerFunc做了一层封装,而negroni.HandlerFunc实现了negroni.Handler接口: // src/github.com/urfave }) n := negroni.New() n = n.With( negroni.HandlerFunc(Middleware1), negroni.HandlerFunc( 作为http.Handler使用 negroni很容易在net/http程序中使用,negroni.Negroni对象可直接作为http.Handler传给相应的方法: func main() {
Negroni还兼容原生的http.Handler,你完全可以把自己的http.Handler加入到Negroni的中间件链中,Negroni会自动调用他们处理我们的HTTP Request的。 因为Negroni完全兼容http.Handler,所以我们自己对于HTTP Request的真实业务处理也可以作为Negroni的一个中间件。 哦,原来是我们的negroni.Classic()初始化Negroni实例的方式,这种方式会默认添加3个中间件。 Negroni配合路由 Negroni是一个让你更容易的使用中间件的微型库,至于具体的业务处理Handler,需要我们自己来写,不过Negroni强大之处在于,我们可以把我们自己的业务处理Hanlder 小结 这一篇主要介绍下Negroni的使用,以及路由的配置和中间件的添加,对Negroni有一些大概的了解,下一篇会继续介绍Negroni的处理器Handler,Handler和HandlerFunc之间的转换
上一篇 Go语言经典库使用分析(五)| Negroni 中间件(一) 中介绍了Negroni中间的入门使用和一些介绍,比如如何添加中间等,中间件的路由等。 Negroni Handler处理器 本质上来说Negroni是一个HTTP Handler,因为他实现了HTTP Handler接口,所以他可以被http.ListenAndServe使用,其次Negroni http Handler和negroni Handler之间的转换 在刚介绍Negroni的时候,我们知道,它是兼容HTTP Handler的,Negroni可以直接把HTTP Handler转换为Negroni 内置中间件介绍 Negroni内置了几个中间件,当我们通过Classic函数创建一个*Negroni的时候,就会有 func Classic() *Negroni { return New(NewRecovery 另外一个就是实现negroni.Handler的方式,Negroni推荐的也是这种方式。
Negroni是一个非常棒的中间件,尤其是其中间件调用链优雅的设计,以及对GO HTTP 原生处理器的兼容。我以前写过两篇文章,对Negroni进行了专门的分析,没有看过的朋友可以在看下。 (六)| Negroni 中间件(二) http://www.flysnow.org/2017/09/02/go-classic-libs-negroni-two.html Negroni Static 使用Negroni实现静态处理非常简单,我们看一个示例。 从示例代码中,可以看到,Negroni主要通过negroni.NewStatic函数,生成一个静态文件处理的中间件。 func main(){ n := negroni.New() n.Use(negroni.NewLogger()) n.Use(&negroni.Static{ Dir: http.Dir
02:17:44 heketi/pkg/remoteexec/kube/exec.go:72:kube.ExecCommands: Current kube connection count: 0 [negroni 02:17:45 heketi/pkg/remoteexec/kube/exec.go:72:kube.ExecCommands: Current kube connection count: 0 [negroni asynchttp] INFO 2019/10/23 02:17:46 Completed job 8da70b6fd6fec1d61c4ba1cd0fe27fe5 in 488.404011ms [negroni [heketi] INFO 2019/10/23 02:17:46 Adding device /dev/sdb to node 1b33ad0dba20eaf23b5e3a4845e7cdb4 [negroni | POST /devices [asynchttp] INFO 2019/10/23 02:17:46 Started job 21af2069b74762a5521a46e2b52e7d6a [negroni
启动静态服务器用 golang 和 ruby 都可以,我用的是 negroni,就三行代码。
Index) router.GET("/hello/:name", Hello) log.Fatal(http.ListenAndServe(":8080", router)) } negroni router := mux.NewRouter() router.HandleFunc("/", HomeHandler) n := negroni.New(Middleware1, Middleware2
中间件Negroni就是这样实现的。 上面讲了这么多,那在Go web中到底什么是路由,路由又是如何实现路由选择的呢?
http.Handler的模式,我们可以把不同的http.Handler组成一个处理链,httprouter.Router也是实现了http.Handler的,所以它也可以作为http.Handler处理链的一部分,比如和Negroni Go语言经典库使用分析(五)| Negroni 中间件(一) Go语言经典库使用分析(三)| Gorilla Handlers 详细介绍 这里使用一个官方的例子,作为Handler处理链的演示。
Martini框架的作者Jeremy Saenz积极响应这些来自Go社区的反馈,写了一个更加符合Go语言规范的库Negroni func (m *Martini) RunOnAddr(addr string ) expect(t, result, "foobarbatbazban") expect(t, response.Code, http.StatusBadRequest)} 来自Negroni
Index) router.GET("/hello/:name", Hello) log.Fatal(http.ListenAndServe(":8080", router)) } negroni router := mux.NewRouter() router.HandleFunc("/", HomeHandler) n := negroni.New(Middleware1, Middleware2
进一步的学习或应用可以结合已有的一些第三方中间件库来编写自己的程序,如Gorilla Web工具箱或codegangsta/negroni。 这两者之中,codegangsta/negroni的聚合度要更高一点,它主动帮我们实现了一些常用功能。
标准库HTTP包已经包含所需的内容了,一般只要加入多路复用器(比如 mux)来选择路由,再加入lib来处理中间件(比如 negroni)的任务(包括身份验证与登录等)就足够了。
)) if (shouldClose) ws.close() // 无话可说, 主动告辞 } const Beverage = [ 'Cosmopolitan', 'Daiquiri', 'Negroni
语言实战笔记(九)| Go 接口 Go语言实战笔记(十二)| Go goroutine Go语言实战笔记(二十六)| Go unsafe 包之内存布局 Go语言经典库使用分析(五)| Negroni
标准库HTTP包已经包含所需的内容了,一般只要加入多路复用器(比如 mux)来选择路由,再加入lib来处理中间件(比如 negroni)的任务(包括身份验证与登录等)就足够了。
cli与我们上一篇文章介绍的negroni是同一个作者urfave。 快速使用 cli需要搭配 Go Modules 使用。
标准库HTTP包已经包含所需的内容了,一般只要加入多路复用器(比如 mux)来选择路由,再加入lib来处理中间件(比如 negroni)的任务(包括身份验证与登录等)就足够了。
标准库HTTP包已经包含所需的内容了,一般只要加入多路复用器(比如 mux)来选择路由,再加入lib来处理中间件(比如 negroni)的任务(包括身份验证与登录等)就足够了。
Go语言实战笔记(九)| Go 接口 - Go语言实战笔记(十二)| Go goroutine - Go语言实战笔记(二十六)| Go unsafe 包之内存布局 - Go语言经典库使用分析(五)| Negroni