5

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

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

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

当我使用以下代码时,它将执行处理程序代码。

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。而且我找不到读取整个目录的方法。

4

2 回答 2

9

你当然可以 :)

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

希望这可以帮助 :)

于 2016-01-22T16:12:37.840 回答
3

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

解决方案是在StaticHandler.

于 2016-01-23T13:40:54.653 回答