Add simple "any" route to catch any method

This commit is contained in:
Alex Hultman
2019-01-22 13:55:28 +01:00
parent 6d469cd8ba
commit f4065b4e3b
3 changed files with 17 additions and 5 deletions
+4 -1
View File
@@ -16,6 +16,9 @@ int main(int argc, char **argv) {
.key_file_name = "/home/alexhultman/key.pem", .key_file_name = "/home/alexhultman/key.pem",
.cert_file_name = "/home/alexhultman/cert.pem", .cert_file_name = "/home/alexhultman/cert.pem",
.passphrase = "1234" .passphrase = "1234"
}).any("/anything", [](auto *res, auto *req) {
std::cout << "Any route with method: " << req->getMethod() << std::endl;
res->end("Hello Any route!");
}).get("/exit", [](auto *res, auto *req) { }).get("/exit", [](auto *res, auto *req) {
if (!token) { if (!token) {
@@ -28,7 +31,7 @@ int main(int argc, char **argv) {
/* Use this route to signal stop listening */ /* Use this route to signal stop listening */
us_listen_socket_close(token); us_listen_socket_close(token);
token = nullptr; token = nullptr;
}).ws<PerSocketData>("/*", { }).ws<PerSocketData>("/ws", {
/* Settings */ /* Settings */
.compression = uWS::DEDICATED_COMPRESSOR, .compression = uWS::DEDICATED_COMPRESSOR,
.maxPayloadLength = 16 * 1024 * 1024, .maxPayloadLength = 16 * 1024 * 1024,
+3 -2
View File
@@ -268,8 +268,9 @@ public:
return std::move(*this); return std::move(*this);
} }
TemplatedApp &&unhandled(std::function<void(HttpResponse<SSL> *, HttpRequest *)> handler) { /* This one catches any method */
httpContext->onUnhandled(handler); TemplatedApp &&any(std::string pattern, std::function<void(HttpResponse<SSL> *, HttpRequest *)> handler) {
httpContext->onHttp("*", pattern, handler);
return std::move(*this); return std::move(*this);
} }
+10 -2
View File
@@ -154,9 +154,17 @@ private:
} }
if (parent != &tree) { if (parent != &tree) {
return matchUrlSegment(parent, 0); int handler = matchUrlSegment(parent, 0);
/* We failed to match */
if (!handler && method.length() > 1) {
return lookupNew("*", url);
}
return handler;
} else { } else {
return 0; /* Unhandled, check if we have any "all" route for this url */
return method.length() == 1 ? 0 : lookupNew("*", url);
} }
} }