全局 request 和 response 事件

全局 request 和 response 事件

在企业应用场景,常常会有统一 tracer 日志的需求。 为了方便在 app 层面统一监听 HttpClient 的请求和响应,我们约定了全局 request 和 response 来暴露这两个事件。

    init options
        |
        V
    emit `request` event
        |
        V
    send request and receive response
        |
        V
    emit `response` event
        |
        V
       end

request 事件:发生在网络操作发生之前

请求发送之前,会触发一个 request 事件,允许对请求做拦截。

app.httpclient.on('request', req => {
  req.url //请求 url
  req.ctx //是发起这次请求的当前上下文

  // 可以在这里设置一些 trace headers,方便全链路跟踪
});

response 事件:发生在网络操作结束之后

请求结束之后会触发一个 response 事件,这样外部就可以订阅这个事件打印日志。

app.httpclient.on('response', result => {
  result.res.status
  result.ctx //是发起这次请求的当前上下文
  result.req //对应的 req 对象,即 request 事件里面那个 req
});