• 全局 requestresponse 事件
    • request 事件:发生在网络操作发生之前
    • response 事件:发生在网络操作结束之后

    全局 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. });