timeout function
Request timeout middleware
Returns 504 Gateway Timeout if the handler takes longer than duration.
Implementation
Middleware timeout({Duration duration = const Duration(seconds: 30)}) {
return (Handler innerHandler) {
return (Request request) async {
try {
return await Future.any<Response>([
Future(() async => await innerHandler(request)),
Future.delayed(duration, () => Response(
504,
body: jsonEncode({'error': 'Request timeout'}),
headers: {'Content-Type': 'application/json'},
)),
]);
} catch (e) {
return Response.internalServerError(
body: jsonEncode({'error': 'Internal server error'}),
headers: {'Content-Type': 'application/json'},
);
}
};
};
}