2016-01-22 82 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之前註冊您的處理程序。