parseRequestBody<T> function
FutureOr<T?>
parseRequestBody<T>(
- HttpRequest request, {
- Duration timeout = const Duration(seconds: 360),
Implementation
FutureOr<T?> parseRequestBody<T>(HttpRequest request,
{Duration timeout = const Duration(seconds: 360)}) async {
try {
var bodyType = request.headers.contentType?.mimeType;
Stream<int> byteStream = request.expand((e) => e.toList());
List<int> bodyBytes = await byteStream.toList();
if (bodyBytes.isEmpty) {
return null;
}
// Return different values based on the content type of the request body
switch (bodyType) {
case 'application/json':
return parseBodyAsJson<T>(bytes: bodyBytes);
case 'text/plain':
return Future.microtask(() => utf8.decode(bodyBytes) as T).catchError(
(e) => throw CreateError(
message: 'Error reading request body', errorCode: 500));
case 'multipart/form-data':
var boundary = request.headers.contentType?.parameters["boundary"];
var formData = FormData();
var result = await req_utils.handleMultipartFormdata(
request, boundary!, formData) as T;
return result;
default:
throw UnsupportedError(
"Unsupport request type in request body stream $bodyType");
}
} on TimeoutException {
logger.severe("Timed out while trying to read the request body");
throw TimeoutException("Timed out while trying to read request body");
} catch (e) {
logger.severe(e.toString());
rethrow;
}
}