| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 6170b9e commit 3fd44f2
11 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -57,6 +57,7 @@ deploy-latest-docker: | |||
| 57 | 57 | - cd build | |
| 58 | 58 | - | | |
| 59 | 59 | cmake .. \ | |
| 60 | + -DEXPRESSCPP_USE_CONAN_DEPENDENCIES=ON \ | ||
| 60 | 61 | -DEXPRESSCPP_ENABLE_COVERAGE=ON \ | |
| 61 | 62 | -DEXPRESSCPP_BUILD_EXAMPLES=ON \ | |
| 62 | 63 | -DEXPRESSCPP_ENABLE_STATIC_FILE_PROVIDER=ON \ | |
@@ -168,6 +169,7 @@ ADDRESS_SANITIZER:linux:gcc9: | |||
| 168 | 169 | - cd build | |
| 169 | 170 | - | | |
| 170 | 171 | cmake .. \ | |
| 172 | + -DEXPRESSCPP_USE_CONAN_DEPENDENCIES=ON \ | ||
| 171 | 173 | -DEXPRESSCPP_ENABLE_COVERAGE=OFF \ | |
| 172 | 174 | -DEXPRESSCPP_BUILD_EXAMPLES=OFF \ | |
| 173 | 175 | -DEXPRESSCPP_BUILD_TESTS=ON \ | |
@@ -188,6 +190,7 @@ LEAK_SANITIZER:linux:gcc9: | |||
| 188 | 190 | - cd build | |
| 189 | 191 | - | | |
| 190 | 192 | cmake .. \ | |
| 193 | + -DEXPRESSCPP_USE_CONAN_DEPENDENCIES=ON \ | ||
| 191 | 194 | -DEXPRESSCPP_ENABLE_COVERAGE=OFF \ | |
| 192 | 195 | -DEXPRESSCPP_BUILD_EXAMPLES=OFF \ | |
| 193 | 196 | -DEXPRESSCPP_BUILD_TESTS=ON \ | |
@@ -208,6 +211,7 @@ LEAK_SANITIZER:linux:gcc9: | |||
| 208 | 211 | - cd build | |
| 209 | 212 | - | | |
| 210 | 213 | cmake .. \ | |
| 214 | + -DEXPRESSCPP_USE_CONAN_DEPENDENCIES=ON \ | ||
| 211 | 215 | -DEXPRESSCPP_ENABLE_COVERAGE=OFF \ | |
| 212 | 216 | -DEXPRESSCPP_BUILD_EXAMPLES=OFF \ | |
| 213 | 217 | -DEXPRESSCPP_BUILD_TESTS=ON \ | |
@@ -228,6 +232,7 @@ UNDEFINED_SANITIZER:linux:gcc9: | |||
| 228 | 232 | - cd build | |
| 229 | 233 | - | | |
| 230 | 234 | cmake .. \ | |
| 235 | + -DEXPRESSCPP_USE_CONAN_DEPENDENCIES=ON \ | ||
| 231 | 236 | -DEXPRESSCPP_ENABLE_COVERAGE=OFF \ | |
| 232 | 237 | -DEXPRESSCPP_BUILD_EXAMPLES=OFF \ | |
| 233 | 238 | -DEXPRESSCPP_BUILD_TESTS=ON \ | |
@@ -248,6 +253,7 @@ THREAD_SANITIZER:linux:gcc9: | |||
| 248 | 253 | - cd build | |
| 249 | 254 | - | | |
| 250 | 255 | cmake .. \ | |
| 256 | + -DEXPRESSCPP_USE_CONAN_DEPENDENCIES=ON \ | ||
| 251 | 257 | -DEXPRESSCPP_ENABLE_COVERAGE=OFF \ | |
| 252 | 258 | -DEXPRESSCPP_BUILD_EXAMPLES=OFF \ | |
| 253 | 259 | -DEXPRESSCPP_BUILD_TESTS=ON \ | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -76,7 +76,11 @@ | |||
| 76 | 76 | "unordered_set": "cpp", | |
| 77 | 77 | "hash_map": "cpp", | |
| 78 | 78 | "hash_set": "cpp", | |
| 79 | - "any": "cpp" | ||
| 79 | + "any": "cpp", | ||
| 80 | + "csetjmp": "cpp", | ||
| 81 | + "rope": "cpp", | ||
| 82 | + "slist": "cpp", | ||
| 83 | + "scoped_allocator": "cpp" | ||
| 80 | 84 | }, | |
| 81 | 85 | "editor.tokenColorCustomizations": { | |
| 82 | 86 | "textMateRules": [ | |
@@ -103,6 +107,6 @@ | |||
| 103 | 107 | "cmake.configureSettings": { | |
| 104 | 108 | "EXPRESSCPP_BUILD_TESTS": true, | |
| 105 | 109 | "EXPRESSCPP_BUILD_EXAMPLES": true, | |
| 106 | - "EXPRESSCPP_ENABLE_STATIC_FILE_PROVIDER": true | ||
| 110 | + "EXPRESSCPP_USE_CONAN_DEPENDENCIES": true | ||
| 107 | 111 | } | |
| 108 | 112 | } | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -1,8 +1,6 @@ | |||
| 1 | 1 | cmake_minimum_required(VERSION 3.8) | |
| 2 | 2 | ||
| 3 | - project(expresscpp | ||
| 4 | - LANGUAGES CXX | ||
| 5 | - C) | ||
| 3 | + project(expresscpp LANGUAGES CXX) | ||
| 6 | 4 | ||
| 7 | 5 | execute_process(COMMAND git | |
| 8 | 6 | describe | |
@@ -19,7 +17,7 @@ endif() | |||
| 19 | 17 | ### | |
| 20 | 18 | option(EXPRESSCPP_USE_CONAN_DEPENDENCIES | |
| 21 | 19 | "Get dependencies from conan" | |
| 22 | - ON) | ||
| 20 | + OFF) | ||
| 23 | 21 | option(EXPRESSCPP_BUILD_EXAMPLES | |
| 24 | 22 | "Build the example executables" | |
| 25 | 23 | OFF) | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -7,7 +7,8 @@ mkdir _build | |||
| 7 | 7 | cd _build | |
| 8 | 8 | cmake .. -GNinja \ | |
| 9 | 9 | -DEXPRESSCPP_BUILD_EXAMPLES=ON \ | |
| 10 | - -DEXPRESSCPP_BUILD_TESTS=ON | ||
| 10 | + -DEXPRESSCPP_BUILD_TESTS=ON \ | ||
| 11 | + -DEXPRESSCPP_USE_CONAN_DEPENDENCIES=ON | ||
| 11 | 12 | ||
| 12 | 13 | cmake --build . -j | |
| 13 | 14 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -73,28 +73,28 @@ int main() { | |||
| 73 | 73 | auto api_v1_router = expresscpp->GetRouter("api v1 router"); | |
| 74 | 74 | expresscpp->Use("/api/v1", api_v1_router); | |
| 75 | 75 | ||
| 76 | - api_v1_router->Get("/", [](auto /*req*/, auto res) { res->Send("work in progress"); }); | ||
| 76 | + api_v1_router->Get("/", [](auto /*req*/, auto res, auto next) { res->Send("work in progress"); }); | ||
| 77 | 77 | ||
| 78 | - api_v1_router->Post("/", [](auto /*req*/, auto res) { res->Send("work in progress"); }); | ||
| 78 | + api_v1_router->Post("/", [](auto /*req*/, auto res, auto next) { res->Send("work in progress"); }); | ||
| 79 | 79 | ||
| 80 | 80 | auto user_v1_router = expresscpp->GetRouter("api v1 user router"); | |
| 81 | 81 | api_v1_router->Use("/user", user_v1_router); | |
| 82 | 82 | ||
| 83 | - user_v1_router->Get("/me", [](auto /*req*/, auto res) { res->Send("work in progress"); }); | ||
| 83 | + user_v1_router->Get("/me", [](auto /*req*/, auto res, auto next) { res->Send("work in progress"); }); | ||
| 84 | 84 | ||
| 85 | 85 | // Things | |
| 86 | 86 | auto things_router = expresscpp->GetRouter("thing router"); | |
| 87 | 87 | api_router->Use("/things", things_router); | |
| 88 | 88 | ||
| 89 | - things_router->Get("/", [](auto /*req*/, auto res) { | ||
| 89 | + things_router->Get("/", [](auto /*req*/, auto res, auto next) { | ||
| 90 | 90 | std::cout << "things called" << std::endl; | |
| 91 | 91 | res->Send("getting all things"); | |
| 92 | 92 | }); | |
| 93 | - things_router->Post("/", [](auto /*req*/, auto res) { | ||
| 93 | + things_router->Post("/", [](auto /*req*/, auto res, auto next) { | ||
| 94 | 94 | std::cout << "things called" << std::endl; | |
| 95 | 95 | res->Send("adding thing"); | |
| 96 | 96 | }); | |
| 97 | - things_router->Get("/:thing_id/status", [](auto /*req*/, auto res) { | ||
| 97 | + things_router->Get("/:thing_id/status", [](auto /*req*/, auto res, auto next) { | ||
| 98 | 98 | std::cout << "things called" << std::endl; | |
| 99 | 99 | res->Send("getting status of things"); | |
| 100 | 100 | }); | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -85,12 +85,9 @@ class ExpressCpp { | |||
| 85 | 85 | std::function<void(const std::error_code)> callback); | |
| 86 | 86 | ||
| 87 | 87 | private: | |
| 88 | - void RegisterPath(const std::string_view path, const HttpMethod method, express_handler_wn_t handler); | ||
| 89 | 88 | void Init(); | |
| 90 | 89 | ||
| 91 | - void lazyrouter(); | ||
| 92 | - | ||
| 93 | - std::shared_ptr<Router> _router; | ||
| 90 | + std::unique_ptr<Router> router_; | ||
| 94 | 91 | ||
| 95 | 92 | #ifdef EXPRESSCPP_ENABLE_STATIC_FILE_PROVIDER | |
| 96 | 93 | std::vector<StaticFileProviderPtr> static_file_providers_; | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -35,14 +35,17 @@ class Router { | |||
| 35 | 35 | */ | |
| 36 | 36 | void Use(std::string_view path, express_handler_wn_t handler); | |
| 37 | 37 | ||
| 38 | - void Get(std::string_view path, express_handler_t handler); | ||
| 39 | - void Post(std::string_view path, express_handler_t handler); | ||
| 40 | - void Delete(std::string_view path, express_handler_t handler); | ||
| 38 | + void Get(std::string_view path, express_handler_wn_t handler); | ||
| 39 | + void Post(std::string_view path, express_handler_wn_t handler); | ||
| 40 | + void Delete(std::string_view path, express_handler_wn_t handler); | ||
| 41 | + void Patch(std::string_view path, express_handler_wn_t handler); | ||
| 41 | 42 | ||
| 42 | - void RegisterPath(std::string_view path, HttpMethod method, express_handler_t handler); | ||
| 43 | + void RegisterPath(std::string_view registered_path, const HttpMethod method, express_handler_wn_t handler); | ||
| 43 | 44 | ||
| 44 | 45 | void HandleRequest(std::shared_ptr<Request> req, std::shared_ptr<Response> res); | |
| 45 | 46 | ||
| 47 | + void SetParentPath(std::string_view parent_path); | ||
| 48 | + | ||
| 46 | 49 | //! @brief returns a router which then can use used to serve some paths | |
| 47 | 50 | auto GetRouter(); | |
| 48 | 51 | auto GetRouter(std::string_view name); | |
@@ -99,6 +102,7 @@ class Router { | |||
| 99 | 102 | ||
| 100 | 103 | std::string_view name_{"unknown"}; | |
| 101 | 104 | std::vector<std::shared_ptr<Layer>> stack_; | |
| 105 | + std::string_view parent_path_; | ||
| 102 | 106 | }; | |
| 103 | 107 | ||
| 104 | 108 | typedef std::shared_ptr<Router> RouterPtr; | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -39,22 +39,22 @@ ExpressCpp::~ExpressCpp() { | |||
| 39 | 39 | ||
| 40 | 40 | void ExpressCpp::Get(std::string_view registered_path, express_handler_wn_t handler) { | |
| 41 | 41 | assert(handler != nullptr); | |
| 42 | - RegisterPath(registered_path, HttpMethod::Get, handler); | ||
| 42 | + router_->Get(registered_path, handler); | ||
| 43 | 43 | } | |
| 44 | 44 | ||
| 45 | 45 | void ExpressCpp::Post(std::string_view registered_path, express_handler_wn_t handler) { | |
| 46 | 46 | assert(handler != nullptr); | |
| 47 | - RegisterPath(registered_path, HttpMethod::Post, handler); | ||
| 47 | + router_->Post(registered_path, handler); | ||
| 48 | 48 | } | |
| 49 | 49 | ||
| 50 | 50 | void ExpressCpp::Delete(std::string_view registered_path, express_handler_wn_t handler) { | |
| 51 | 51 | assert(handler != nullptr); | |
| 52 | - RegisterPath(registered_path, HttpMethod::Delete, handler); | ||
| 52 | + router_->Delete(registered_path, handler); | ||
| 53 | 53 | } | |
| 54 | 54 | ||
| 55 | 55 | void ExpressCpp::Patch(std::string_view registered_path, express_handler_wn_t handler) { | |
| 56 | 56 | assert(handler != nullptr); | |
| 57 | - RegisterPath(registered_path, HttpMethod::Patch, handler); | ||
| 57 | + router_->Patch(registered_path, handler); | ||
| 58 | 58 | } | |
| 59 | 59 | ||
| 60 | 60 | void ExpressCpp::Error(express_handler_wecn_t handler) { | |
@@ -65,8 +65,7 @@ void ExpressCpp::Error(express_handler_wecn_t handler) { | |||
| 65 | 65 | } | |
| 66 | 66 | ||
| 67 | 67 | std::shared_ptr<Route> ExpressCpp::CreateRoute(const std::string_view registered_path) { | |
| 68 | - lazyrouter(); | ||
| 69 | - return _router->CreateRoute(registered_path); | ||
| 68 | + return router_->CreateRoute(registered_path); | ||
| 70 | 69 | } | |
| 71 | 70 | ||
| 72 | 71 | void ExpressCpp::Use(express_handler_t handler) { | |
@@ -77,8 +76,7 @@ void ExpressCpp::Use(express_handler_t handler) { | |||
| 77 | 76 | ||
| 78 | 77 | void ExpressCpp::Use(express_handler_wn_t handler) { | |
| 79 | 78 | Console::Debug("using handler for all paths"); | |
| 80 | - lazyrouter(); | ||
| 81 | - _router->Use("/", handler); | ||
| 79 | + router_->Use("/", handler); | ||
| 82 | 80 | } | |
| 83 | 81 | ||
| 84 | 82 | void ExpressCpp::Use(std::string_view registered_path, express_handler_t handler) { | |
@@ -87,14 +85,12 @@ void ExpressCpp::Use(std::string_view registered_path, express_handler_t handler | |||
| 87 | 85 | } | |
| 88 | 86 | ||
| 89 | 87 | void ExpressCpp::Use(std::string_view registered_path, express_handler_wn_t handler) { | |
| 90 | - RegisterPath(registered_path, HttpMethod::All, handler); | ||
| 88 | + router_->RegisterPath(registered_path, HttpMethod::All, handler); | ||
| 91 | 89 | } | |
| 92 | 90 | ||
| 93 | 91 | void ExpressCpp::Use(std::string_view registered_path, RouterPtr router) { | |
| 94 | 92 | Console::Debug(fmt::format(R"(adding router "{}" to path "{}")", router->GetName(), registered_path)); | |
| 95 | - // RegisterPath( | ||
| 96 | - // registered_path, HttpMethod::All, [&](auto req, auto res) { router->HandleRequest(req, res); }, true); | ||
| 97 | - throw std::runtime_error("not implemented yet"); | ||
| 93 | + router_->Use(registered_path, router); | ||
| 98 | 94 | } | |
| 99 | 95 | ||
| 100 | 96 | ExpressCpp& ExpressCpp::Listen(const uint16_t port, ready_fn_cb_error_code_t callback) { | |
@@ -132,8 +128,8 @@ ExpressCpp& ExpressCpp::Listen(const uint16_t port, ready_fn_cb_error_code_t cal | |||
| 132 | 128 | ||
| 133 | 129 | #ifdef EXPRESSCPP_ENABLE_STATIC_FILE_PROVIDER | |
| 134 | 130 | void ExpressCpp::Use(StaticFileProviderPtr static_file_provider) { | |
| 135 | - RegisterPath("/", HttpMethod::Get, | ||
| 136 | - [&](auto req, auto res, auto /*next*/) { static_file_provider->HandleRequests(req, res); }); | ||
| 131 | + router_->RegisterPath("/", HttpMethod::Get, | ||
| 132 | + [&](auto req, auto res, auto /*next*/) { static_file_provider->HandleRequests(req, res); }); | ||
| 137 | 133 | } | |
| 138 | 134 | ||
| 139 | 135 | void ExpressCpp::Use(std::string_view path, StaticFileProviderPtr static_file_provider) { | |
@@ -201,15 +197,15 @@ void ExpressCpp::HandleRequest(express_request_t req, express_response_t res, st | |||
| 201 | 197 | }; | |
| 202 | 198 | } | |
| 203 | 199 | ||
| 204 | - if (_router == nullptr) { | ||
| 200 | + if (router_ == nullptr) { | ||
| 205 | 201 | Console::Error("no routes defined on app"); | |
| 206 | 202 | callback(); | |
| 207 | 203 | return; | |
| 208 | 204 | } | |
| 209 | 205 | ||
| 210 | 206 | Console::Debug(fmt::format(R"(handling request: "{}" "{}")", getHttpMethodName(req->getMethod()), req->getPath())); | |
| 211 | 207 | ||
| 212 | - _router->HandleRequest(req, res); | ||
| 208 | + router_->HandleRequest(req, res); | ||
| 213 | 209 | } catch (...) { | |
| 214 | 210 | auto eptr = std::current_exception(); | |
| 215 | 211 | if (error_handler_registered_) { | |
@@ -238,7 +234,7 @@ void ExpressCpp::HandleRequest(std::error_code ec, express_request_t req, expres | |||
| 238 | 234 | std::vector<RoutingStack> ExpressCpp::Stack() const { | |
| 239 | 235 | std::vector<RoutingStack> routing_stack; | |
| 240 | 236 | ||
| 241 | - for (const auto& l : _router->stack()) { | ||
| 237 | + for (const auto& l : router_->stack()) { | ||
| 242 | 238 | // if route is nullptr -> this means it is a middleware | |
| 243 | 239 | if (l->getRoute() != nullptr) { | |
| 244 | 240 | for (const auto& ll : l->getRoute()->stack_) { | |
@@ -256,31 +252,11 @@ std::vector<RoutingStack> ExpressCpp::Stack() const { | |||
| 256 | 252 | return routing_stack; | |
| 257 | 253 | } | |
| 258 | 254 | ||
| 259 | - void ExpressCpp::RegisterPath(const std::string_view registered_path, const HttpMethod method, | ||
| 260 | - express_handler_wn_t handler) { | ||
| 261 | - lazyrouter(); | ||
| 262 | - | ||
| 263 | - auto route = _router->CreateRoute(registered_path); | ||
| 264 | - Console::Debug(fmt::format("registering path \"{}\"", registered_path)); | ||
| 265 | - | ||
| 266 | - PathToRegExpOptions op; | ||
| 267 | - auto layer = std::make_shared<Layer>("/", op, handler); | ||
| 268 | - layer->setMethod(method); | ||
| 269 | - route->methods_.insert(method); | ||
| 270 | - route->stack_.push_back(layer); | ||
| 271 | - } | ||
| 272 | - | ||
| 273 | 255 | void ExpressCpp::Init() { | |
| 274 | 256 | Console::Debug("ExpressCpp created"); | |
| 275 | - | ||
| 257 | + router_ = std::make_unique<Router>("base router"); | ||
| 276 | 258 | finished = false; | |
| 277 | 259 | InstallSignalHandler(); | |
| 278 | 260 | } | |
| 279 | 261 | ||
| 280 | - void ExpressCpp::lazyrouter() { | ||
| 281 | - if (_router == nullptr) { | ||
| 282 | - _router = std::make_shared<Router>("base router"); | ||
| 283 | - } | ||
| 284 | - } | ||
| 285 | - | ||
| 286 | 262 | } // namespace expresscpp | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -22,6 +22,7 @@ Request::Request(std::string_view path, HttpMethod method) : path_(path), method | |||
| 22 | 22 | void Request::Init() { | |
| 23 | 23 | timestamp_ = std::chrono::system_clock::now(); | |
| 24 | 24 | uuid_ = boost::uuids::random_generator()(); | |
| 25 | + originalUrl_ = path_; | ||
| 25 | 26 | } | |
| 26 | 27 | ||
| 27 | 28 | std::string Request::getBody() const { | |
| Back | FazBrowse Home | New Git URL |
0 commit comments