responseDataHandler function
Handle response for different types of data such as string, stream, Model, List, encodable.
Implementation
void responseDataHandler(dynamic payload, HttpRequest request) {
HttpResponse res = request.response;
if (payload == null) {
res.close();
return;
}
/// if payload is stream
if (payload is StreamFile) {
res.headers.contentType = payload.contentType;
res.addStream(payload.stream).then((_) => res.close());
return;
}
/// if payload is downloadable file,
/// we response contentDisposition header with stream data.
if (payload is DownloadableFile) {
res.headers.contentType = payload.contentType;
res.headers.add(FILE_DOWNLOAD_HEADER, payload.contentDisposition);
res.addStream(payload.stream).then((_) => res.close());
return;
}
// if payload is stream
if (payload is Stream<List<int>>) {
res.addStream(payload).then((_) => res.close());
return;
}
/// if payload handle base Http Exception
/// we set http status from exception and return as map
/// which will parse into json and response as json
if (payload is IHttpException) {
res.statusCode = payload.code;
payload = payload.toResponse();
}
if (payload is Exception || payload is Error) {
res.statusCode = HttpStatus.internalServerError;
payload = payload.toString();
}
if (payload is DateTime) {
payload = payload.toIso8601String();
}
String responseData;
/// if payload is Map or List, parse into json
/// and response as json
if (payload is! String) {
responseData = JSON.stringify(payload);
res.headers.contentType = ContentType.json;
} else {
responseData = payload;
}
/// finally write and close http connection
res.write(responseData);
res.close();
}