vert.x使用多个处理程序

时间:2016-01-22 06:51:55

标签: 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
        });

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

我试过

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

但它只是阅读了index.html文件而且它没有读取CSS。而且我找不到一种方法来读取整个目录。

2 个答案:

答案 0 :(得分:7)

当然可以:)

这是你的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); 
        }
    }
}

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

希望这有助于:)

答案 1 :(得分:2)

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

解决方案是在StaticHandler之前注册处理程序。