【Crow】一款开源C++Web框架的安装与构建

简介: 【Crow】一款开源C++Web框架的安装与构建

Crow的安装与构建

前言

项目地址:

https://github.com/crowcpp/crow

官方网站及文档说明:

https://crowcpp.org/master/

缘由:

前几天一直在寻找一款C++的Web框架,通过不断的在Github、StackOverFlow以及搜索引擎上搜索,最终我还是选择了Crow这一框架,其他相关框架还有,restbed,served,nrgest,微软的C++ REST SDK等,Github相关搜索C++ REST framework...

结果在测试用例构建时候,似乎遇到了一个bug,于是我提交了一个Issues,得到了开发人员的回复,最终问题得到了解决,在此,再次感谢项目维护人员的付出!


配置环境

本篇文章为Linux安装。其他平台或具体最低要求等,还请见官方说明文档

  • Ubuntu 20.0.4
  • GCC 9.4.0
  • Boost 1.71
  • ASIO 1.22.1
  • Cmake 3.24.0

到目前为止,Corw依赖使用的ASIO已经为脱离BOOST的独立版。

相关安装参考文章:

相关问题解决参考文章:

Unable to locate package —— Linux新手入门:Unable to locate package错误解决办法

安装Crow

从源码安装,详见官方说明文档

git clone https://github.com/CrowCpp/Crow.git

进入Crow目录,创建build目录,并进入。

mkdir build
cd build
cmake .. -DCROW_BUILD_EXAMPLES=OFF -DCROW_BUILD_TESTS=OFF
make install

Hello world

#include <crow.h>

int main(){
    crow::SimpleApp app;
    //测试
     CROW_ROUTE(app, "/test")([](){
        return "Hello world";
    });
    app.port(18888).multithreaded().run();
}

编译

  • g++
g++ main.cpp -o  main -lpthread
  • CMake
# 指定版本
cmake_minimum_required(VERSION 3.24)
# 项目名
project(main)
# 使用指定源文件来生成目标可执行文件
add_executable(main  main.cpp)
# 引入外部依赖包
find_package(Crow REQUIRED)
# 目标文件与库文件进行链接
target_link_libraries(main PUBLIC Crow::Crow)

测试

image-20220709084125646


我的第一个程序

  CROW_ROUTE(app, "/low_price_recommend").methods("POST"_method)([](const crow::request& req){
        auto x = crow::json::load(req.body);
        crow::json::wvalue return_ret({});//返回结果
        if (!x){//参数不全
            return_ret["status_code"] = std::string("0");
            return crow::response(return_ret);
        }else{
            return_ret = myfounction.low_price_recommend(
                        x["flight_date"].s(),
                        x["flight_departure"].s(),
                        x["flight_arrival"].s(),
                        x["flight_agent"].s(),
                        x["flight_retCounts"].s());
            return crow::response(return_ret);
        }
    });
  • myfounction为我封装的一个类创建的对象,low_price_recommend为其中的一个方法。返回一个crow::json::wvalue。
  • 变量x为具体传进来的参数
  • crow::json::wvalue为返回的json格式数据

可能出现的问题

  • 找不到asio库,例如如下所示:
CMake Error at /usr/local/share/cmake-3.24/Modules/CMakeFindDependencyMacro.cmake:47 (find_package):
By not providing "Findasio.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "asio", but
CMake did not find one.

Could not find a package configuration file provided by "asio" with any of
the following names:

asioConfig.cmake
asio-config.cmake

Add the installation prefix of "asio" to CMAKE_PREFIX_PATH or set
"asio_DIR" to a directory containing one of the above files. If "asio"
provides a separate development package or SDK, be sure it has been
installed.
Call Stack (most recent call first):
/usr/local/lib/cmake/Crow/CrowConfig.cmake:32 (find_dependency)
CMakeLists.txt:6 (find_package)

-- Configuring incomplete, errors occurred!
See also "/root/flight_query_system/query_system/build/CMakeFiles/CMakeOutput.log".
  • 解决
  • 打开并编辑这个文件/usr/local/lib/cmake/Crow/CrowConfig.cmake

大概在30行左右,将这行

list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
替换为
list(APPEND CMAKE_MODULE_PATH ${CROW_CMAKE_DIR})
再次感谢Crow项目维护成员Luca Schlecker老哥的解答,以及所有维护此项目的成员。

官方GITTER讨论聊天室——crowfork/community


解决跨域问题

原ISSUES
#include <crow.h>
#include "query/query.h"
#include "common/common.h"
#include "crow/middlewares/cors.h"

int main(){

    crow::App<crow::CORSHandler> app;
    auto& cors = app.get_middleware<crow::CORSHandler>();
    cors
        .global()
        .origin("*")
        .headers("origin, x-requested-with, accept, access-control-allow-origin, authorization, content-type")
        .methods("POST"_method, "GET"_method, "PUT"_method, "DELETE"_method, "PATCH"_method, "OPTIONS"_method);


    //测试
     CROW_ROUTE(app, "/hello")([](){
        return "Hello world";
    });
     app.port(18888).multithreaded().run();
}
相关文章
|
5月前
|
前端开发 JavaScript 开发者
JavaScript:构建动态Web的核心力量
JavaScript:构建动态Web的核心力量
|
7月前
|
C++ Windows
.NET Framework安装不成功,下载`NET Framework 3.5`文件,Microsoft Visual C++
.NET Framework常见问题及解决方案汇总,涵盖缺失组件、安装失败、错误代码等,提供多种修复方法,包括全能王DLL修复工具、微软官方运行库及命令行安装等,适用于Windows系统,解决应用程序无法运行问题。
1080 3
|
9月前
|
前端开发 算法 API
构建高性能图像处理Web应用:Next.js与TailwindCSS实践
本文分享了构建在线图像黑白转换工具的技术实践,涵盖技术栈选择、架构设计与性能优化。项目采用Next.js提供优秀的SSR性能和SEO支持,TailwindCSS加速UI开发,WebAssembly实现高性能图像处理算法。通过渐进式处理、WebWorker隔离及内存管理等策略,解决大图像处理性能瓶颈,并确保跨浏览器兼容性和移动设备优化。实际应用案例展示了其即时处理、高质量输出和客户端隐私保护等特点。未来计划引入WebGPU加速、AI增强等功能,进一步提升用户体验。此技术栈为Web图像处理应用提供了高效可行的解决方案。
|
4月前
|
开发框架 前端开发 Go
【GoGin】(0)基于Go的WEB开发框架,GO Gin是什么?怎么启动?本文给你答案
Gin:Go语言编写的Web框架,以更好的性能实现类似Martini框架的APInet/http、Beego:开源的高性能Go语言Web框架、Iris:最快的Go语言Web框架,完备的MVC支持。
461 1
|
8月前
|
开发框架 JSON 中间件
Go语言Web开发框架实践:路由、中间件、参数校验
Gin框架以其极简风格、强大路由管理、灵活中间件机制及参数绑定校验系统著称。本文详解其核心功能:1) 路由管理,支持分组与路径参数;2) 中间件机制,实现全局与局部控制;3) 参数绑定,涵盖多种来源;4) 结构体绑定与字段校验,确保数据合法性;5) 自定义校验器扩展功能;6) 统一错误处理提升用户体验。Gin以清晰模块化、流程可控及自动化校验等优势,成为开发者的优选工具。
|
8月前
|
开发框架 安全 前端开发
Go Web开发框架实践:模板渲染与静态资源服务
Gin 是一个功能强大的 Go Web 框架,不仅适用于构建 API 服务,还支持 HTML 模板渲染和静态资源托管。它可以帮助开发者快速搭建中小型网站,并提供灵活的模板语法、自定义函数、静态文件映射等功能,同时兼容 Go 的 html/template 引擎,具备高效且安全的页面渲染能力。
|
8月前
|
开发框架 JSON 中间件
Go语言Web开发框架实践:使用 Gin 快速构建 Web 服务
Gin 是一个高效、轻量级的 Go 语言 Web 框架,支持中间件机制,非常适合开发 RESTful API。本文从安装到进阶技巧全面解析 Gin 的使用:快速入门示例(Hello Gin)、定义 RESTful 用户服务(增删改查接口实现),以及推荐实践如参数校验、中间件和路由分组等。通过对比标准库 `net/http`,Gin 提供更简洁灵活的开发体验。此外,还推荐了 GORM、Viper、Zap 等配合使用的工具库,助力高效开发。
|
10月前
|
人工智能 自然语言处理 JavaScript
测试工程师要失业?Magnitude:开源AI Agent驱动的端到端测试框架,让Web测试更智能,自动完善测试用例!
Magnitude是一个基于视觉AI代理的开源端到端测试框架,通过自然语言构建测试用例,结合推理代理和视觉代理实现智能化的Web应用测试,支持本地运行和CI/CD集成。
1369 15
测试工程师要失业?Magnitude:开源AI Agent驱动的端到端测试框架,让Web测试更智能,自动完善测试用例!
|
10月前
|
SQL 数据库连接 数据库
在C++的QT框架中实现SQLite数据库的连接与操作
以上就是在C++的QT框架中实现SQLite数据库的连接与操作的基本步骤。这些步骤包括创建数据库连接、执行SQL命令、处理查询结果和关闭数据库连接。在实际使用中,你可能需要根据具体的需求来修改这些代码。
636 14