diff --git a/doc/wiki-cn/blademaster-mid.md b/doc/wiki-cn/blademaster-mid.md index 8f32944d3..0c2d8257e 100644 --- a/doc/wiki-cn/blademaster-mid.md +++ b/doc/wiki-cn/blademaster-mid.md @@ -4,7 +4,8 @@ # 写自己的中间件 -middleware本质上就是一个handler,如下代码: +middleware本质上就是一个handler,接口和方法声明如下代码: + ```go // Handler responds to an HTTP request. type Handler interface { @@ -21,7 +22,7 @@ func (f HandlerFunc) ServeHTTP(c *Context) { ``` 1. 实现了`Handler`接口,可以作为engine的全局中间件使用:`engine.Use(YourHandler)` -2. 声明为`HandlerFunc`方法,可以作为router的局部中间件使用:`e.GET("/path", YourHandlerFunc)` +2. 声明为`HandlerFunc`方法,可以作为engine的全局中间件使用:`engine.UseFunc(YourHandlerFunc)`,也可以作为router的局部中间件使用:`e.GET("/path", YourHandlerFunc)` 简单示例代码如下: @@ -42,16 +43,17 @@ d := &Demo{} e.Use(d) // HandlerFunc使用如下: +e.UseFunc(d.ServeHTTP) e.GET("/path", d.ServeHTTP) // 或者只有方法 myHandler := func(ctx *bm.Context) { // some code } +e.UseFunc(myHandler) e.GET("/path", myHandler) ``` - # 全局中间件 在blademaster的`server.go`代码中,有以下代码: @@ -64,19 +66,17 @@ func DefaultServer(conf *ServerConfig) *Engine { } ``` -会默认创建一个bm engine,并注册`Recovery(), Trace(), Logger()`三个middlerware,用于全局handler处理。优先级从前到后。 -如果需要自定义默认全局执行的middleware,可以使用`NewServer`方法创建一个无middleware的engine对象。 -如果想要将自定义的middleware注册进全局,可以继续调用Use方法如下: +会默认创建一个`bm engine`,并注册`Recovery(), Trace(), Logger()`三个middlerware用于全局handler处理,优先级从前到后。如果想要将自定义的middleware注册进全局,可以继续调用Use方法如下: ```go engine.Use(YourMiddleware()) ``` -此方法会将`YourMiddleware`追加到已有的全局middleware后执行。 +此方法会将`YourMiddleware`追加到已有的全局middleware后执行。如果需要全部自定义全局执行的middleware,可以使用`NewServer`方法创建一个无middleware的engine对象,然后使用`engine.Use/UseFunc`进行注册。 # 局部中间件 -先来看一段示例(代码再pkg/net/http/blademaster/middleware/auth模块下): +先来看一段鉴权伪代码示例([auth示例代码位置](https://github.com/bilibili/kratos/tree/master/example/blademaster/middleware/auth)): ```go func Example() {