如何记录飞镖货架请求的响应

How to log the response for a dart shelf request

我正在使用 Dart Shelf 包,我需要记录它发送的响应。

我已经设法记录了请求,但响应技术不太清楚:

final handler = const shelf.Pipeline()
        .addMiddleware(corsHeaders())
        .addMiddleware(shelf.logRequests(
            logger: (message, isError) =>
                _logRequest(message, isError: isError)))
        .addHandler((req) async {
      final res = await Router().call(req);
      return res;
    });

问题分为两个部分。

  1. 如何记录 headers。
  2. 是否可以记录 body。 我知道有一个问题是响应 body 只能读取一次。

由于某些响应可能很大,我需要过滤记录了 body 的请求。

答案有点飞镖。您有一个返回匿名函数的匿名函数。

var handler = const Pipeline()
    .addMiddleware(
      (handler) => (request) async {
        final response = await handler(request);
        print(response.headers);
        // you could read the body here, but you'd also need to 
        // save the content and pipe it into a new response instance
        return response;
      },
    )
    .addHandler(syncHandler);