diff --git a/README.md b/README.md index 8008626c..79d11146 100644 --- a/README.md +++ b/README.md @@ -250,7 +250,7 @@ int main() { //将信息从中间件传输到处理程序 struct get_data : public base_aspect { bool before(coro_http_request& req, coro_http_response& res) { - req.set_aspect_data("hello", std::string("hello world")); + req.set_aspect_data("hello world"); return true; } } @@ -262,8 +262,8 @@ int main() { }, std::vector{std::make_shared(), std::make_shared()}); server.set_http_handler("/aspect/data", [](coro_http_request& req, coro_http_response& res) { - std::string hello = req.get_aspect_data("hello"); - res.set_status_and_content(status_type::ok, std::move(hello)); + auto& val = req.get_aspect_data(); + res.set_status_and_content(status_type::ok, std::move(val[0])); }, std::vector{std::make_shared()}); server.sync_start(); diff --git a/example/main.cpp b/example/main.cpp index e3ab4589..6cd1a90a 100644 --- a/example/main.cpp +++ b/example/main.cpp @@ -258,7 +258,7 @@ struct log_t : public base_aspect { struct get_data : public base_aspect { bool before(coro_http_request &req, coro_http_response &res) { - req.set_aspect_data("hello", std::string("hello world")); + req.set_aspect_data("hello world"); return true; } }; @@ -268,9 +268,8 @@ async_simple::coro::Lazy use_aspects() { server.set_http_handler( "/get", [](coro_http_request &req, coro_http_response &resp) { - std::optional val = - req.get_aspect_data("hello"); - assert(*val == "hello world"); + auto &val = req.get_aspect_data(); + assert(val[0] == "hello world"); resp.set_status_and_content(status_type::ok, "ok"); }, std::vector>{std::make_shared(), diff --git a/include/cinatra/coro_http_request.hpp b/include/cinatra/coro_http_request.hpp index b4b7bf4c..5f418a37 100644 --- a/include/cinatra/coro_http_request.hpp +++ b/include/cinatra/coro_http_request.hpp @@ -208,23 +208,11 @@ class coro_http_request { return true; } - void set_aspect_data(const std::string &&key, const std::any &data) { - aspect_data_[key] = data; + void set_aspect_data(std::string data) { + aspect_data_.push_back(std::move(data)); } - template - std::optional get_aspect_data(const std::string &&key) { - auto it = aspect_data_.find(key); - if (it == aspect_data_.end()) { - return std::optional{}; - } - - try { - return std::any_cast(it->second); // throws - } catch (const std::bad_any_cast &e) { - return std::optional{}; - } - } + std::vector &get_aspect_data() { return aspect_data_; } std::unordered_map get_cookies( std::string_view cookie_str) const { @@ -268,7 +256,7 @@ class coro_http_request { std::string_view body_; coro_http_connection *conn_; bool is_websocket_; - std::unordered_map aspect_data_; + std::vector aspect_data_; std::string cached_session_id_; }; } // namespace cinatra \ No newline at end of file diff --git a/lang/english/README.md b/lang/english/README.md index 4caa5e3d..a51df467 100644 --- a/lang/english/README.md +++ b/lang/english/README.md @@ -235,7 +235,7 @@ int main() { //将信息从中间件传输到处理程序 struct get_data : public base_aspect { bool before(coro_http_request& req, coro_http_response& res) { - req.set_aspect_data("hello", std::string("hello world")); + req.set_aspect_data("hello world"); return true; } } @@ -247,7 +247,8 @@ int main() { }, std::vector{std::make_shared(), std::make_shared()}); server.set_http_handler("/aspect/data", [](coro_http_request& req, coro_http_response& res) { - std::string hello = req.get_aspect_data("hello"); + auto &val = req.get_aspect_data(); + std::string& hello = val[0]; res.set_status_and_content(status_type::ok, std::move(hello)); }, std::vector{std::make_shared()});