Skip to content
This repository has been archived by the owner on Mar 13, 2019. It is now read-only.

includeos/path_to_regex

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

path_to_regex

Turns a route path (string, string pattern or regular expression) into a regex and populates a vector with the route's parameters. Mana uses this library to match incoming request paths with the routes specified by the developer. This is done by the Router, and the developer has access to the parameters through the request. Path_to_regex is a port of the most essential functionality in the JavaScript library pillarjs/path-to-regexp.

Example service: Acorn Web Server Appliance.

Usage

Specifying a route in service.cpp:

Router router;

// GET /users/5, /users/101 and so on
router.on_get("/users/:id(\\d+)", [](auto req, auto res) {
  auto id = req->params().get("id");
  
  // Do actions according to "id"
  if(id == "42")
    // ...
});

server.set_routes(router);

Some route path examples:

// GET /
router.on_get("/", [](auto req, auto res) {
  res->send(true);
});

// GET /about
router.on_get("/about", [](auto req, auto res) {
  res->send(true);
});

// GET /acd and /abcd
router.on_get("/ab?cd", [](auto req, auto res) {
  res->send(true);
});

// GET /abcd, /abbcd, /abbbcd and so on
router.on_get("/ab+cd", [](auto req, auto res) {
  res->send(true);
});

// GET /abcd, /abxcd, /abRANDOMcd, /ab123cd and so on
router.on_get("/ab*cd", [](auto req, auto res) {
  res->send(true);
});

// GET /abe and /abcde
router.on_get("/ab(cd)?e", [](auto req, auto res) {
  res->send(true);
});

// GET /science-paper, /newspaper and so on, but not /newspapers or /paper f.ex.
router.on_get("/.*paper$/", [](auto req, auto res) {
  res->send(true);
});

// GET /users/jane/books/aeneid, /users/john/books/poetics and so on
router.on_get("/users/:username([a-z]+)/books/:title([a-z]+)", [](auto req, auto res) {
  auto username = req->params().get("username");
  auto title = req->params().get("title");
  // First example: username == "jane", title == "aeneid"
  // Params' get-method throws ParamException if key doesn't exist
  
  // Do actions according to the values
  
  res->send(true);
});

// GET /users/2/books/5, /users/15/books/312 and so on
router.on_get("/users/:userId(\\d+)/books/:bookId(\\d+)", [](auto req, auto res) {
  auto userId = req->params().get("userId");
  auto bookId = req->params().get("bookId");
  // First example: userId == "2", bookId == "5"
  // Params' get-method throws ParamException if key doesn't exist
  
  // Do actions according to the values
  
  res->send(true);
});

Requirements

About

Turns a route path into a regex

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published