Создание контроллера промежуточного программного обеспечения для обработки всех запросов к Aqueduct в Dart - PullRequest
1 голос
/ 28 марта 2020

Я хочу создать регистратор, который будет записывать определенную информацию из каждого запроса в базу данных. Я знаю, как сделать контроллер, и я мог бы связать его с каждым маршрутом, например:

  @override
  Controller get entryPoint {
    final router = Router();

    router
        .route('/register')
        .link(() => LogController(context))
        .link(() => RegisterController(context, authServer));

    router
        .route('/auth/token')
        .link(() => LogController(context))
        .link(() => AuthController(authServer));

    router
        .route('/logout')
        .link(() => LogController(context))
        .link(() => Authorizer.bearer(authServer))
        .link(() => LogoutController(context));

    router
        .route('/words/[:id]')
        .link(() => LogController(context))
        .link(() => Authorizer.bearer(authServer))
        .link(() => WordsController(context));

    return router;
  }

Как видите, LogController повторяется для каждого маршрута.

Я бы предпочел просто сопоставить любой маршрут из одного места, зарегистрировать данные, а затем позволить другим контроллерам обрабатывать вещи как обычно. Это возможно?

1 Ответ

2 голосов
/ 29 марта 2020

Конечно, верните LogController, связанный с маршрутизатором, в качестве точки входа:

@override
Controller get entryPoint {
  final router = Router();

  /* configure Router as you are today */

  // Notice the cascade operator... LogController instance is returned
  return LogController(context)..link(() => router);
}
...