0%

使用crow在CPP环境下开发web服务器

下载与安装

  • 官方网站
  • github
  • 下载自己需要的relaease即可
    • picture 1

      使用

  • C++包的头文件在/usr/include目录下
  • 但是出现错误fatal error: boost/optional.hpp: No such file or directory
  • 此时安装boost,也就是sudo apt-get install libboost-all-dev
  • 然后又报错undefined reference to pthread_sigmask,此时在编译后加参数-lpthread添加多线程库
  • 但是还有错误undefined reference to boost::system::system_category()'之类的,需要添加参数-lboost_system -lboost_thread
  • 最终的编译命令为g++ ./crowHelloWorld.cpp -o helloWorld -lpthread -lboost_system -lboost_thread
  • 输出结果
    • picture 2
    • picture 3

一个简单的包含前后端互换数据的案例

  • 新手参考

    后端

    #include "crow.h"
    #include <cstdio>

    int main()
    {
    crow::SimpleApp app;

    CROW_ROUTE(app, "/")([](){
    auto page = crow::mustache::load_text("./mainPage.html");
    return page;
    });

    CROW_ROUTE(app, "/data").methods("POST"_method)([](const crow::request& req){
    auto x = crow::json::load(req.body);
    std::cout<<x["data"]<<std::endl;
    crow::json::wvalue retDict;
    retDict["message"] = x["data"];

    return crow::response(retDict);
    });

    app.port(8080).multithreaded().run();
    }

    前端

  • 注意后端发送的JSON数据不需要解析(PARSE)
    <!DOCTYPE html>

    <head>
    <script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
    </head>

    <body>
    <input placeholder="send something..." id="input">
    <button onclick="sendAjax()">send</button> <br>
    <div id="div1"></div>
    </body>
    <script>
    var input = document.getElementById("input");
    var div1 = document.getElementById("div1");
    function sendAjax() {
    $.ajax({
    type: "POST",
    url: "/data",
    data: JSON.stringify({ 'data': input.value }),
    success: function (datas) {
    console.log(datas);
    // dataDict = JSON.parse(datas);
    div1.innerHTML = datas['message'];
    }
    });
    }

    </script>

    makefile

    main: 
    g++ ./crowHelloWorld.cpp -o main -lpthread -lboost_system -lboost_thread
    clean:
    # rm *.o
    rm main

    文件目录格式

  • .html文件需要放在工作目录的templates文件夹下

    效果

  • picture 4