The Wayback Machine - https://web.archive.org/web/20201028234346/https://github.com/expresscpp/expresscpp
Skip to content
master
Go to file
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
doc
 
 
 
 
 
 
 
 
src
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

ExpressCpp

Fast, unopinionated, minimalist web framework for C++ Perfect for building REST APIs

Logo of ExpressCpp

Conan pipeline status expresscpp_http License: MIT c++17

Design goals

ExpressCpp aims to be for C++ the same as express for Node.JS including its ecosystem of middlewares and extensions.

Express and Node.JS:

const express = require('express');
const app = express();
app.get('/', (req, res) => res.send('Hello World!'));
const port = 3000;
app.listen(port, () => console.log(`Listening on port ${port}!`));

ExpressCpp:

#include "expresscpp/expresscpp.hpp"
int main() {
  auto expresscpp = std::make_shared<expresscpp::ExpressCpp>();
  expresscpp->Get("/", [](auto /*req*/, auto res) { res->Send("hello world!"); });
  constexpr uint16_t port = 3000u;
  expresscpp->Listen(port,[=](auto /*ec*/) { std::cout << "Listening on port " << port << std::endl; }).Run();
  return 0;
}

Using me

conan

conan remote add expresscpp https://api.bintray.com/conan/expresscpp/expresscpp/

add this to you conan file:

expresscpp/0.11.0@expresscpp/testing

this to your cmake:

find_package(expresscpp)
# ...
target_link_libraries(my_target PRIVATE expresscpp::expresscpp)

vendoring as subdirectory

add_subdirectory(thirdparty/expresscpp)
# ...
target_link_libraries(my_target PRIVATE expresscpp::expresscpp)

installing and using find_package

git clone https://gitlab.com/expresscpp/expresscpp.git
cd expresscpp
mkdir build
cd build
cmake ..
make -j
sudo make install

find_package(expresscpp)
# ...
target_link_libraries(my_target PRIVATE expresscpp::expresscpp)

Build instructions (e.g. ubuntu)

Dependencies

  • boost[asio, beast, uuid]
  • nlohmann/json
  • libfmt
  • gtest (optional)

Conan

sudo apt install -y cmake gcc-9 g++-9 python3-pip

# conan for dependency management
sudo pip3 install conan --upgrade

mkdir -p build
cd build
cmake .. -DEXPRESSCPP_USE_CONAN_DEPENDENCIES=ON
cmake --build . -j

Debian

sudo apt install -y cmake gcc-9 g++-9

# get debian dependencies
sudo apt install -y libboost-all-dev nlohmann-json3-dev libfmt-dev libgtest-dev

mkdir -p build
cd build
cmake ..
cmake --build . -j

Features/Examples

name file
url query params ./example/query_params.cpp
url params ./example/url_params.cpp
auth-like middleware ./example/middleware_auth_like.cpp
log-like middleware ./example/middleware_logger_like.cpp
error handler ./example/error_handler.cpp
variadic middlewares ./example/multiple_handlers.cpp
subrouting ./example/router.cpp

Official Middlewares

name file
static file provider ./example/serve_static.cpp
favicon provider(embedded) ./example/favicon.cpp
  • expresscpp-logger -> TODO
  • expresscpp-grpc-proxy -> TODO
  • expresscpp-reverse-proxy -> TODO
  • expresscpp-basic-auth -> TODO

Similiar projects

name repo
BeastHttp https://github.com/0xdead4ead/BeastHttp/
crow (unmaintained) https://github.com/ipkn/crow
Simple-Web-Server https://gitlab.com/eidheim/Simple-Web-Server
restinio https://github.com/stiffstream/restinio
served https://github.com/meltwater/served
You can’t perform that action at this time.