drogon icon indicating copy to clipboard operation
drogon copied to clipboard

Task<HttpResponsePtr> doFilter(const HttpRequestPtr &req) 这个怎么实现?

Open mrclassfree opened this issue 10 months ago • 2 comments

我是想在自定义的过滤器中,实现doFilter, 但是我不想用异步回调方式,我想使用协程方式实现。 我看基类 HttpFilter 中有个 virtual Task<HttpResponsePtr> doFilter(const HttpRequestPtr &req) = 0;

具体有实现这个协程方式doFilter的示例吗?

mrclassfree avatar Jan 16 '25 07:01 mrclassfree

https://github.com/drogonframework/drogon/blob/a3b4779540831cb8c03addb591ced3080b488917/lib/tests/integration_test/server/CoroFilter.cpp#L7-L12 大概是这个样子,返回空就通过,返回一个构造好的HttpResponsePtr对象就拦截了。

an-tao avatar Jan 16 '25 07:01 an-tao

drogon/lib/tests/integration_test/server/CoroFilter.cpp

Lines 7 to 12 in a3b4779

Task<HttpResponsePtr> CoroFilter::doFilter(const HttpRequestPtr& req) { int secs = std::stoi(req->getParameter("secs")); co_await sleepCoro(trantor::EventLoop::getEventLoopOfCurrentThread(), secs); co_return {}; }

大概是这个样子,返回空就通过,返回一个构造好的HttpResponsePtr对象就拦截了。

感谢,我去试一下!

mrclassfree avatar Jan 18 '25 01:01 mrclassfree