Search code examples
aqueduct

Aqueduct controller subrouting


Is there any possibility to subroute in Aqueduct controller?

router.route("/userApi").link(() => UserController(context));

class UserController extends ResourceController {

@Operation.post("/login")
Future<Response> login(@Bind.body() IdWrap note) async {...}

@Operation.post("/byInnerToken")
Future<Response> login(@Bind.body() IdWrap note) async {...}

post("userApi/login", {"id": "aaa"})
post("userApi/byInnerToken", {"innerToken": "bbb"})

Solution

  • Generally, yes, by using path variables.

    router.route("/userApi/:type").link(() => UserController(context));
    
    class UserController extends ResourceController {
      @Operation.post('type')
      Future<Response> login(@Bind.path('type') String type, @Bind.body() IdWrap note) async {
        switch (type) {
          case "login": return login(note);
          case "byInnerToken": return withToken(note);
          default: return Response.notFound();
        }
      }
    }
    

    There is no ability to pattern match the contents of the path variable.