全局 requestresponse 事件

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

  1. init options
  2. |
  3. V
  4. emit `request` event
  5. |
  6. V
  7. send request and receive response
  8. |
  9. V
  10. emit `response` event
  11. |
  12. V
  13. end

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

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

  1. app.httpclient.on('request', req => {
  2. req.url //请求 url
  3. req.ctx //是发起这次请求的当前上下文
  4. // 可以在这里设置一些 trace headers,方便全链路跟踪
  5. });

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

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

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