vert.x 使用多个处理程序
vert.x use more than one handler
是否可以为路径添加 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。而且我找不到读取整个目录的方法。
当然可以:)
这是你的 Verticle 我注册了两个 Handlers
@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
希望这对您有所帮助:)
正如前面的评论所说,您可以注册多个处理程序。问题是 StaticHandler
结束了响应,所以下一个处理程序不会被 ctx.next()
调用。
解决方案是在 StaticHandler
.
之前注册您的处理程序
是否可以为路径添加 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。而且我找不到读取整个目录的方法。
当然可以:)
这是你的 Verticle 我注册了两个 Handlers
@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
希望这对您有所帮助:)
正如前面的评论所说,您可以注册多个处理程序。问题是 StaticHandler
结束了响应,所以下一个处理程序不会被 ctx.next()
调用。
解决方案是在 StaticHandler
.