- @override
Delivers req to this instance to be processed.
This method is the entry point of a Request into this RequestController.
By default, it invokes this controller's processRequest method within a try-catch block
that guarantees an HTTP response will be sent for Request.
Source
@override
Future receive(Request req) async {
RequestController next;
try {
var requestURISegmentIterator = req.innerRequest.uri.pathSegments.iterator;
if (_basePathSegments.length > 0) {
for (var i = 0; i < _basePathSegments.length; i++) {
requestURISegmentIterator.moveNext();
if (_basePathSegments[i] != requestURISegmentIterator.current) {
await _unhandledRequestController(req);
return null;
}
}
}
var remainingSegments = <String>[];
while (requestURISegmentIterator.moveNext()) {
remainingSegments.add(requestURISegmentIterator.current);
}
if (remainingSegments.isEmpty) {
remainingSegments = [""];
}
var node = _rootRouteNode.nodeForPathSegments(remainingSegments);
if (node?.specification == null) {
await _unhandledRequestController(req);
return null;
}
var requestPath = new HTTPRequestPath(node.specification, remainingSegments);
req.path = requestPath;
next = node.controller;
} catch (any, stack) {
return handleError(req, any, stack);
}
return next?.receive(req);
}