是否可以为路径添加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。而且我找不到一种方法来读取整个目录。
答案 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
之前注册处理程序。