body<T extends ParsedBody> function

Middleware<T> body<T extends ParsedBody>({
  1. Directory? uploadDirectory,
})

Dia Middleware for parsing HttpRequest body uploadDirectory - directory for uploading files, default = Directory.systemTemp;

Implementation

Middleware<T> body<T extends ParsedBody>({Directory? uploadDirectory}) =>
    (T ctx, next) async {
      ctx.query.addAll(ctx.request.uri.queryParameters);
      final dataStream = ctx.request.cast<List<int>>();

      final media = ctx.request.headers.contentType != null
          ? MediaType.parse(ctx.request.headers.value('content-type')!)
          : null;

      uploadDirectory ??= Directory.systemTemp.createTempSync();

      Future<String> getBody() {
        return utf8.decoder.bind(dataStream).join();
      }

      if (media != null) {
        if (media.type == 'multipart' &&
            media.parameters.containsKey('boundary')) {
          await _parseMultipart(ctx, uploadDirectory!, media, dataStream);
        } else if (media.mimeType == 'application/json') {
          final body = await getBody();
          if (body.isNotEmpty) {
            ctx.parsed
                .addAll(_foldToStringDynamic(json.decode(body) as Map) ?? {});
          }
        } else if (media.mimeType == 'application/x-www-form-urlencoded') {
          final body = await getBody();
          if (body.isNotEmpty) ctx.parsed.addAll(Uri.splitQueryString(body));
        }
      }

      await next();
    };