vert.x 使用多个处理程序

vert.x use more than one handler

是否可以为路径添加 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
        });

但是当我尝试访问此路径时,有什么方法可以执行这两个处理程序吗?

我试过了

HttpServerResponse response = routingContext.response();
            response.sendFile("webroot/index.html");

但它只读取了 index.html 文件,并没有读取 CSS。而且我找不到读取整个目录的方法。

当然可以:)

这是你的 Verticle 我注册了两个 Handlers

@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); 
        }
    }
}

ctx.next()调用下一个Handler 对于错误处理,请使用 ctx.fail

希望这对您有所帮助:)

正如前面的评论所说,您可以注册多个处理程序。问题是 StaticHandler 结束了响应,所以下一个处理程序不会被 ctx.next() 调用。

解决方案是在 StaticHandler.

之前注册您的处理程序