From 5b3c589c8e254c76a04cdadbf7ecb28bff4bf420 Mon Sep 17 00:00:00 2001 From: "thomashii@dukefirehawk.com" Date: Fri, 7 May 2021 13:21:13 +0800 Subject: [PATCH] Updated route --- .../angel_orm_test/lib/src/has_map_test.dart | 1 + packages/route/lib/src/grammar.dart | 2 +- .../route/lib/src/middleware_pipeline.dart | 16 +++++++-- packages/route/lib/src/router.dart | 35 +++++++++---------- packages/route/test/server_test.dart | 10 +++--- 5 files changed, 38 insertions(+), 26 deletions(-) diff --git a/packages/orm/angel_orm_test/lib/src/has_map_test.dart b/packages/orm/angel_orm_test/lib/src/has_map_test.dart index 3aa76448..1d781078 100644 --- a/packages/orm/angel_orm_test/lib/src/has_map_test.dart +++ b/packages/orm/angel_orm_test/lib/src/has_map_test.dart @@ -72,6 +72,7 @@ hasMapTests(FutureOr Function() createExecutor, expect(await query.get(executor), isEmpty); }); + // TODO: Failed test case test('list equals', () async { var query = HasMapQuery(); query.where?.list.equals(['1', 2, 3.0]); diff --git a/packages/route/lib/src/grammar.dart b/packages/route/lib/src/grammar.dart index 9d7df15b..a0628056 100644 --- a/packages/route/lib/src/grammar.dart +++ b/packages/route/lib/src/grammar.dart @@ -4,7 +4,7 @@ class RouteGrammar { static const String notSlashRgx = r'([^/]+)'; //static final RegExp rgx = RegExp(r'\((.+)\)'); static final Parser notSlash = - match(RegExp(notSlashRgx)).value((r) => r.span!.text); + match(RegExp(notSlashRgx)).value((r) => r.span?.text ?? ''); static final Parser regExp = match(RegExp(r'\(([^\n)]+)\)([^/]+)?')) diff --git a/packages/route/lib/src/middleware_pipeline.dart b/packages/route/lib/src/middleware_pipeline.dart index cf44f78c..e4b68ee3 100644 --- a/packages/route/lib/src/middleware_pipeline.dart +++ b/packages/route/lib/src/middleware_pipeline.dart @@ -4,10 +4,11 @@ import 'router.dart'; class MiddlewarePipeline { /// All the possible routes that matched the given path. final Iterable> routingResults; - List? _handlers; + final List _handlers = []; /// An ordered list of every handler delegated to handle this request. - List? get handlers { + List get handlers { + /* if (_handlers != null) return _handlers; final handlers = []; @@ -16,6 +17,17 @@ class MiddlewarePipeline { } return _handlers = handlers; + + */ + if (_handlers.isEmpty) { + return _handlers; + } + + for (var result in routingResults) { + _handlers.addAll(result.allHandlers); + } + + return _handlers; } MiddlewarePipeline(Iterable> routingResults) diff --git a/packages/route/lib/src/router.dart b/packages/route/lib/src/router.dart index 6895f0b9..24d1da8c 100644 --- a/packages/route/lib/src/router.dart +++ b/packages/route/lib/src/router.dart @@ -65,7 +65,7 @@ class Router { /// for requests with the given method (case-insensitive). /// Provide '*' as the method to respond to all methods. Route addRoute(String method, String path, T handler, - {Iterable? middleware}) { + {Iterable middleware = const []}) { if (_useCache == true) { throw StateError('Cannot add routes after caching is enabled.'); } @@ -73,7 +73,7 @@ class Router { // Check if any mounted routers can match this final handlers = [handler]; - middleware ??= []; + //middleware ??= []; handlers.insertAll(0, middleware); @@ -165,7 +165,7 @@ class Router { /// Returns the created route. /// You can also register middleware within the router. SymlinkRoute group(String path, void Function(Router router) callback, - {Iterable middleware = const Iterable.empty(), String name = ''}) { + {Iterable middleware = const [], String name = ''}) { final router = Router().._middleware.addAll(middleware); callback(router); return mount(path, router)..name = name; @@ -174,8 +174,7 @@ class Router { /// Asynchronous equivalent of [group]. Future> groupAsync( String path, FutureOr Function(Router router) callback, - {Iterable middleware = const Iterable.empty(), - String name = ''}) async { + {Iterable middleware = const [], String name = ''}) async { final router = Router().._middleware.addAll(middleware); await callback(router); return mount(path, router)..name = name; @@ -372,42 +371,43 @@ class Router { } /// Adds a route that responds to any request matching the given path. - Route all(String path, T handler, {Iterable? middleware}) { + Route all(String path, T handler, {Iterable middleware = const []}) { return addRoute('*', path, handler, middleware: middleware); } /// Adds a route that responds to a DELETE request. - Route delete(String path, T handler, {Iterable? middleware}) { + Route delete(String path, T handler, {Iterable middleware = const []}) { return addRoute('DELETE', path, handler, middleware: middleware); } /// Adds a route that responds to a GET request. - Route get(String path, T handler, {Iterable? middleware}) { + Route get(String path, T handler, {Iterable middleware = const []}) { return addRoute('GET', path, handler, middleware: middleware); } /// Adds a route that responds to a HEAD request. - Route head(String path, T handler, {Iterable? middleware}) { + Route head(String path, T handler, {Iterable middleware = const []}) { return addRoute('HEAD', path, handler, middleware: middleware); } /// Adds a route that responds to a OPTIONS request. - Route options(String path, T handler, {Iterable? middleware}) { + Route options(String path, T handler, + {Iterable middleware = const {}}) { return addRoute('OPTIONS', path, handler, middleware: middleware); } /// Adds a route that responds to a POST request. - Route post(String path, T handler, {Iterable? middleware}) { + Route post(String path, T handler, {Iterable middleware = const []}) { return addRoute('POST', path, handler, middleware: middleware); } /// Adds a route that responds to a PATCH request. - Route patch(String path, T handler, {Iterable? middleware}) { + Route patch(String path, T handler, {Iterable middleware = const []}) { return addRoute('PATCH', path, handler, middleware: middleware); } /// Adds a route that responds to a PUT request. - Route put(String path, T handler, {Iterable? middleware}) { + Route put(String path, T handler, {Iterable middleware = const []}) { return addRoute('PUT', path, handler, middleware: middleware); } } @@ -424,8 +424,7 @@ class _ChainedRouter extends Router { @override Route addRoute(String method, String path, handler, - {Iterable? middleware}) { - middleware ??= []; + {Iterable middleware = const []}) { var route = super.addRoute(method, path, handler, middleware: [..._handlers, ...middleware]); //_root._routes.add(route); @@ -434,8 +433,7 @@ class _ChainedRouter extends Router { @override SymlinkRoute group(String path, void Function(Router router) callback, - {Iterable? middleware, String name = ''}) { - middleware ??= []; + {Iterable middleware = const [], String? name}) { final router = _ChainedRouter(_root, [..._handlers, ...middleware]); callback(router); return mount(path, router)..name = name; @@ -444,8 +442,7 @@ class _ChainedRouter extends Router { @override Future> groupAsync( String path, FutureOr Function(Router router) callback, - {Iterable? middleware, String name = ''}) async { - middleware ??= []; + {Iterable middleware = const [], String? name}) async { final router = _ChainedRouter(_root, [..._handlers, ...middleware]); await callback(router); return mount(path, router)..name = name; diff --git a/packages/route/test/server_test.dart b/packages/route/test/server_test.dart index 3ccbdd2b..0a55419d 100644 --- a/packages/route/test/server_test.dart +++ b/packages/route/test/server_test.dart @@ -87,12 +87,12 @@ void main() { router.resolveAbsolute(req.uri.toString(), method: req.method); final pipeline = MiddlewarePipeline(results); - if (pipeline.handlers!.isEmpty) { + if (pipeline.handlers.isEmpty) { res ..statusCode = 404 ..writeln('404 Not Found'); } else { - for (final handler in pipeline.handlers!) { + for (final handler in pipeline.handlers) { if (!((await handler(req, res)) as bool)) break; } } @@ -151,7 +151,8 @@ void main() { group('mount', () { group('path', () { test('top-level', () async { - final res = await client!.post(Uri.parse('$url/beatles/spinal_clacker')); + final res = + await client!.post(Uri.parse('$url/beatles/spinal_clacker')); print('Response: ${res.body}'); expect(res.body, equals('come together')); }); @@ -197,7 +198,8 @@ void main() { await expect404(client!.head(Uri.parse(url!))); await expect404(client!.patch(Uri.parse('$url/people'))); await expect404(client!.post(Uri.parse('$url/people/0'))); - await expect404(client!.delete(Uri.parse('$url/beatles2/spinal_clacker'))); + await expect404( + client!.delete(Uri.parse('$url/beatles2/spinal_clacker'))); }); }); }