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

できますよ :)

これは、2 つのハンドラを登録した 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 に答える