2016-01-22 84 views
2

是否可以为路径添加2个处理程序?vert.x使用多个处理程序

我需要从文件夹加载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。而我找不到一个方法来读取整个目录。

回答

5

当然,你可以:)

这是您的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()调用下一个处理 处理错误使用ctx.fail

希望这有助于:)

1

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

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