Request 与 Response 中间件

请求中间件

使用 Client.OnBeforeRequest 可以注册请求中间件,你可以让在请求发出前执行一些回调,回调函数里可以访问到 ClientRequest 对象:

client := req.C()

// Registering Request Middleware
client.OnBeforeRequest(func(client *req.Client, req *req.Request) error {
	// You can access Client and current Request object to do something
	// as you need, e.g. Record the metrics.

    return nil  // return nil if it is success
  })

响应中间件

使用Client.OnAfterResponse 可以注册响应中间件,你可以在响应返回前执行一些回调,回调函数里可以访问到 ClientResponse 对象:

client := req.C()

// Registering Response Middleware
client.OnAfterResponse(func(client *req.Client, resp *req.Response) error {
    if resp.Err != nil { // you can skip if error occurs.
        return nil
    }

    // You can access Client and current Response object to do something
    // as you need

    return nil  // return nil if it is success
  })

如果发生了 error,resp.Err 将不为 nil,你可以在中间件函数内部判断是否发生 error 来决定是否跳过执行后续逻辑。像记录监控指标或者链路追踪信息等场景,不管是否有 error 都希望要执行,就可以不用判断。

示例