vert.x使用多个处理程序

jas*_*roy 4 vert.x vertx3

是否可以为路径添加2个处理程序?

我需要html从文件夹加载内容并session在访问/路径时检查值.

如果我放置router.route().handler(StaticHandler.create().setWebRoot("webroot")); 它将从webroot文件夹中读取内容.

当我使用以下代码时,它将执行hanlder代码.

router.route("/").handler(routingContext -> {
            Session session = routingContext.session();         
            String name = session.get("uname");
            // some code
        });
Run Code Online (Sandbox Code Playgroud)

但是当我尝试访问此路径时,有没有办法执行两个处理程序?

我试过了

HttpServerResponse response = routingContext.response();
            response.sendFile("webroot/index.html");
Run Code Online (Sandbox Code Playgroud)

但它只是读取index.html文件,它不读取CSS.我找不到一个方法来读取整个目录.

小智 8

你当然可以 :)

这是你的Verticle我注册了两个处理程序

@Override
public void start() throws Exception {
    Router router = Router.router(vertx);
    router.route().path("/hello").handler(new Handler0());
    router.route().path("/hello").handler(new Handler1());

    vertx.createHttpServer().requestHandler(router::accept).listen(8080);
}

class Handler0 implements Handler<RoutingContext> {

    @Override
    public void handle(RoutingContext ctx) {
        ctx.put("hi", "your nice");
        ctx.next(); // IMPORTANT!!
    }
}

class Handler1 implements Handler<RoutingContext> {

    @Override
    public void handle(RoutingContext ctx) {
        String hi = ctx.get("hi");
        if (hi.equals("your nice") {
           ctx.request().response().end(hi);
        } else {
           ctx.fail(401); 
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

ctx.next()使用ctx.fail调用下一个处理错误的Handler

希望这可以帮助 :)