首页 > 解决方案 > 渡槽忽略控制器

问题描述

我有两个控制器,一个资源,另一个正常。它们在同一个线程中,并且都必须运行。

我故意在普通控制器中插入一个突然返回,以确保它被简单地忽略。

常规控制器:

import 'package:aqueduct/aqueduct.dart';
import 'package:app_server/app_server.dart';

class InputController extends Controller {
  @override
  Future<RequestOrResponse> handle(Request request) async {
    return Response.badRequest();
  }
}

渠道:

@override
  Controller get entryPoint {
    final router = Router();
    
    router.route("/auth/[:type]")
      ..link(() => InputController())
      ..link(() => AuthorizationController(context));
    
    return router;

  }

通道跳过 InputController,立即进入资源控制器(AuthorizationController)。

标签: dartaqueduct

解决方案


事实上,它不会跳过InputController(如果你想相信的话,你可以在里面printfrouter.route("/auth/[:type]") :)),但它适用于返回的对象而不是 InputController.

换句话说,您的频道可以写成如下:

@override
  Controller get entryPoint {
    final router = Router();
    
    var router2 = router.route("/auth/[:type]");
      router2 = router2.link(() => InputController())
      router2 = router2.link(() => AuthorizationController(context));
    
    return router;

  }

将级联符号更改为通道中的普通链以解决游览问题:

@override
  Controller get entryPoint {
    final router = Router();
    
    router.route("/auth/[:type]")
      .link(() => InputController())
      .link(() => AuthorizationController(context));
    
    return router;

  }

推荐阅读