在 Dart 中创建一个中间件控制器来处理对 Aqueduct 的所有请求
Creating a middleware controller to handle all requests to Aqueduct in Dart
我想制作一个记录器,将每个请求的某些信息记录到数据库中。我知道如何制作控制器,我可以 link 它到每条路线,如下所示:
@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
对每条路线重复。
我宁愿只匹配来自单个位置的任何路由,记录数据,然后让其他控制器正常处理事情。这可能吗?
当然,return一个链接到路由器的 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);
}
我想制作一个记录器,将每个请求的某些信息记录到数据库中。我知道如何制作控制器,我可以 link 它到每条路线,如下所示:
@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
对每条路线重复。
我宁愿只匹配来自单个位置的任何路由,记录数据,然后让其他控制器正常处理事情。这可能吗?
当然,return一个链接到路由器的 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);
}