2020-11-18 16:38:04 +00:00
|
|
|
#include "crow_all.h"
|
2014-10-23 17:12:03 +00:00
|
|
|
|
|
|
|
#include <sstream>
|
|
|
|
|
2021-11-25 11:45:38 +00:00
|
|
|
class ExampleLogHandler : public crow::ILogHandler
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
void log(std::string /*message*/, crow::LogLevel /*level*/) override
|
|
|
|
{
|
|
|
|
// cerr << "ExampleLogHandler -> " << message;
|
|
|
|
}
|
2014-10-23 17:12:03 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
int main()
|
|
|
|
{
|
|
|
|
crow::SimpleApp app;
|
|
|
|
|
|
|
|
CROW_ROUTE(app, "/")
|
2021-11-25 11:45:38 +00:00
|
|
|
.name("hello")([]
|
|
|
|
{ return "Hello World!"; });
|
2014-10-23 17:12:03 +00:00
|
|
|
|
|
|
|
CROW_ROUTE(app, "/about")
|
2021-11-25 11:45:38 +00:00
|
|
|
([]()
|
|
|
|
{ return "About Crow example."; });
|
2014-10-23 17:12:03 +00:00
|
|
|
|
|
|
|
// simple json response
|
|
|
|
CROW_ROUTE(app, "/json")
|
2021-11-25 11:45:38 +00:00
|
|
|
([]
|
|
|
|
{
|
2021-08-20 00:57:21 +00:00
|
|
|
crow::json::wvalue x({{"message", "Hello, World!"}});
|
|
|
|
x["message2"] = "Hello, World.. Again!";
|
2021-11-25 11:45:38 +00:00
|
|
|
return x; });
|
2021-08-20 00:57:21 +00:00
|
|
|
|
|
|
|
CROW_ROUTE(app, "/json-initializer-list-constructor")
|
2021-11-25 11:45:38 +00:00
|
|
|
([]
|
|
|
|
{ return crow::json::wvalue({
|
|
|
|
{"first", "Hello world!"}, /* stores a char const* hence a json::type::String */
|
|
|
|
{"second", std::string("How are you today?")}, /* stores a std::string hence a json::type::String. */
|
|
|
|
{"third", 54}, /* stores an int (as 54 is an int literal) hence a std::int64_t. */
|
|
|
|
{"fourth", 54l}, /* stores a long (as 54l is a long literal) hence a std::int64_t. */
|
|
|
|
{"fifth", 54u}, /* stores an unsigned int (as 54u is a unsigned int literal) hence a std::uint64_t. */
|
|
|
|
{"sixth", 54ul}, /* stores an unsigned long (as 54ul is an unsigned long literal) hence a std::uint64_t. */
|
|
|
|
{"seventh", 2.f}, /* stores a float (as 2.f is a float literal) hence a double. */
|
|
|
|
{"eighth", 2.}, /* stores a double (as 2. is a double literal) hence a double. */
|
|
|
|
{"ninth", nullptr}, /* stores a std::nullptr hence json::type::Null . */
|
|
|
|
{"tenth", true} /* stores a bool hence json::type::True . */
|
|
|
|
}); });
|
2021-08-20 00:57:21 +00:00
|
|
|
|
|
|
|
// json list response
|
|
|
|
CROW_ROUTE(app, "/json_list")
|
2021-11-25 11:45:38 +00:00
|
|
|
([]
|
|
|
|
{
|
2021-08-20 00:57:21 +00:00
|
|
|
crow::json::wvalue x(crow::json::wvalue::list({1,2,3}));
|
2021-11-25 11:45:38 +00:00
|
|
|
return x; });
|
2014-10-23 17:12:03 +00:00
|
|
|
|
2021-11-25 11:45:38 +00:00
|
|
|
CROW_ROUTE(app, "/hello/<int>")
|
|
|
|
([](int count)
|
|
|
|
{
|
2014-10-23 17:12:03 +00:00
|
|
|
if (count > 100)
|
|
|
|
return crow::response(400);
|
|
|
|
std::ostringstream os;
|
|
|
|
os << count << " bottles of beer!";
|
2021-11-25 11:45:38 +00:00
|
|
|
return crow::response(os.str()); });
|
2014-10-23 17:12:03 +00:00
|
|
|
|
2021-07-03 15:08:12 +00:00
|
|
|
// example which uses only response as a paramter without
|
2020-12-02 10:06:29 +00:00
|
|
|
// request being a parameter.
|
2021-11-25 11:45:38 +00:00
|
|
|
CROW_ROUTE(app, "/add/<int>/<int>")
|
|
|
|
([](crow::response& res, int a, int b)
|
|
|
|
{
|
2014-10-23 17:12:03 +00:00
|
|
|
std::ostringstream os;
|
|
|
|
os << a+b;
|
|
|
|
res.write(os.str());
|
2021-11-25 11:45:38 +00:00
|
|
|
res.end(); });
|
2014-10-23 17:12:03 +00:00
|
|
|
|
|
|
|
// Compile error with message "Handler type is mismatched with URL paramters"
|
|
|
|
//CROW_ROUTE(app,"/another/<int>")
|
|
|
|
//([](int a, int b){
|
2021-11-25 11:45:38 +00:00
|
|
|
//return crow::response(500);
|
2014-10-23 17:12:03 +00:00
|
|
|
//});
|
|
|
|
|
|
|
|
// more json example
|
|
|
|
CROW_ROUTE(app, "/add_json")
|
2021-11-25 11:45:38 +00:00
|
|
|
([](const crow::request& req)
|
|
|
|
{
|
2014-10-23 17:12:03 +00:00
|
|
|
auto x = crow::json::load(req.body);
|
|
|
|
if (!x)
|
|
|
|
return crow::response(400);
|
|
|
|
int sum = x["a"].i()+x["b"].i();
|
|
|
|
std::ostringstream os;
|
|
|
|
os << sum;
|
2021-11-25 11:45:38 +00:00
|
|
|
return crow::response{os.str()}; });
|
2014-10-23 17:12:03 +00:00
|
|
|
|
|
|
|
CROW_ROUTE(app, "/params")
|
2021-11-25 11:45:38 +00:00
|
|
|
([](const crow::request& req)
|
|
|
|
{
|
2014-10-23 17:12:03 +00:00
|
|
|
std::ostringstream os;
|
2021-11-21 16:00:44 +00:00
|
|
|
os << "Params: " << req.url_params << "\n\n";
|
2014-10-23 17:12:03 +00:00
|
|
|
os << "The key 'foo' was " << (req.url_params.get("foo") == nullptr ? "not " : "") << "found.\n";
|
|
|
|
if(req.url_params.get("pew") != nullptr) {
|
|
|
|
double countD = boost::lexical_cast<double>(req.url_params.get("pew"));
|
|
|
|
os << "The value of 'pew' is " << countD << '\n';
|
|
|
|
}
|
|
|
|
auto count = req.url_params.get_list("count");
|
|
|
|
os << "The key 'count' contains " << count.size() << " value(s).\n";
|
|
|
|
for(const auto& countVal : count) {
|
|
|
|
os << " - " << countVal << '\n';
|
|
|
|
}
|
2021-11-25 11:45:38 +00:00
|
|
|
return crow::response{os.str()}; });
|
2014-10-23 17:12:03 +00:00
|
|
|
|
|
|
|
// ignore all log
|
2016-08-27 09:03:49 +00:00
|
|
|
crow::logger::setLogLevel(crow::LogLevel::Debug);
|
2014-10-23 17:12:03 +00:00
|
|
|
//crow::logger::setHandler(std::make_shared<ExampleLogHandler>());
|
|
|
|
|
|
|
|
app.port(18080)
|
2021-11-25 11:45:38 +00:00
|
|
|
.server_name("CrowCpp")
|
|
|
|
.multithreaded()
|
|
|
|
.run();
|
2014-10-23 17:12:03 +00:00
|
|
|
}
|