drogon icon indicating copy to clipboard operation
drogon copied to clipboard

Support per-method middlewares.

Open hwc0919 opened this issue 1 year ago • 2 comments

hwc0919 avatar Apr 28 '24 15:04 hwc0919

Example codes


class MyMiddleware : public HttpMiddleware<MyMiddleware>
{
  public:
    MyMiddleware(){};  // do not omit constructor

    void invoke(const HttpRequestPtr &req,
                MiddlewareNextCallback &&nextCb,
                MiddlewareCallback &&mcb) override
    {
        if (req->path() == "/some/path")
        {
            // intercept directly
            mcb(HttpResponse::newNotFoundResponse(req));
            return;
        }
        // Do something before calling the next middleware
        nextCb([mcb = std::move(mcb)](const HttpResponsePtr &resp) {
            // Do something after the next middleware returns
            mcb(resp);
        });
    }
};


class MyCoroMiddleware : public HttpCoroMiddleware<MyCoroMiddleware>
{
  public:
    MyCoroMiddleware(){};  // do not omit constructor

    Task<HttpResponsePtr> invoke(
        const HttpRequestPtr &req,
        MiddlewareNextAwaiter &&nextAwaiter) override
    {
        if (req->path() == "/some/path")
        {
            // intercept directly
            co_return HttpResponse::newNotFoundResponse(req);
        }
        // Do something before calling the next middleware
        auto resp = co_await nextAwaiter;
        // Do something after the next middleware returns
        co_return resp;
    }
};

class MiddlewareTest : public drogon::HttpController<MiddlewareTest>
{
  public:
    METHOD_LIST_BEGIN
    ADD_METHOD_TO(MiddlewareTest::handleRequest,
                  "/test-middleware",
                  Get,
                  "MyFilter",
                  "MyMiddleware",
                  "MyCoroMiddleware");
    METHOD_LIST_END

    void handleRequest(
        const HttpRequestPtr &req,
        std::function<void(const HttpResponsePtr &)> &&callback) const
    {
        callback(HttpResponse::newHttpResponse());
    }
};

hwc0919 avatar Apr 29 '24 06:04 hwc0919

@an-tao I have midterms next week, my review may take a while

Mis1eader-dev avatar May 02 '24 11:05 Mis1eader-dev