body<T extends ParsedBody> function
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();
};