serve method
Стартовая точка
Implementation
Future<dynamic> serve(HttpRequest request) async {
request.response.headers.add(
'Content-Type',
'application/json;charset=utf-8',
);
request.response.headers.add('X-Powered-By', '_dserver');
late Method method;
switch (request.method.trim().toUpperCase()) {
case 'GET':
method = Method.GET;
break;
case 'POST':
method = Method.POST;
break;
case 'PUT':
method = Method.PUT;
break;
case 'DELETE':
method = Method.DELETE;
break;
}
print('Handle ${request.method} ${request.requestedUri}');
bool isError = true;
if (_routes.containsKey(method)) {
final String empty = '_empty_';
final String rPath = request.requestedUri.path;
String path = _routes[method]!.keys.firstWhere(
(String path) => path.split(' ')[1].trim() == rPath,
orElse: () => empty,
);
// Try find by RegExp
if (path == empty) {
final Map<String, Handler> handlers = _routes[method]!;
final List<Handler> rHandlers = <Handler>[];
handlers.forEach((String key, Handler value) {
if (value.rPath != null) {
rHandlers.add(value);
}
});
final Handler hFind = rHandlers.firstWhere(
(Handler handler) {
final RegExp regExp = RegExp(handler.rPath!.toString());
if (regExp.hasMatch(rPath)) {
return true;
}
return false;
},
orElse: () => Handler(callback: (_) => ''),
);
// Still not found - Route not found!
if (hFind.path == null && hFind.rPath == null) {
path = '';
isError = false;
request.response.statusCode = HttpStatus.notFound;
request.response.write(jsonEncode(
<String, dynamic>{
'success': false,
'system': true,
'error': 'Route not found',
},
));
} else {
path = '';
isError = false;
final Object result = await hFind.callback.call(request);
request.response.write(jsonEncode(
<String, dynamic>{
'success': true,
'result': result,
},
));
}
}
if (path != '') {
final Object result = await _routes[method]![path]!.callback.call(
request,
);
isError = false;
request.response.write(jsonEncode(
<String, dynamic>{
'success': true,
'result': result,
},
));
}
}
if (isError) {
request.response.statusCode = HttpStatus.badRequest;
request.response.write(jsonEncode(
<String, dynamic>{
'success': false,
'system': false,
'error': 'Some error was occured',
},
));
}
await request.response.close();
}