Drogon框架HttpController未生效求助:调用app().run()后接口无法访问
Drogon框架控制器未被加载问题排查
正在学习C++ Drogon框架,阅读官方及非官方HttpControllers相关文档后,尝试搭建包含两个端点的简单Web服务器。已将控制器添加到CMake配置中,但测试/get接口时出现错误,调用app().run()后Drogon并未使用自定义的控制器类,请求排查原因。
控制器类代码
// ApiController.hpp #pragma once #include <drogon/HttpController.h> // internal #include "forwards.hpp" class ApiController : public drogon::HttpController<ApiController> { public: METHOD_LIST_BEGIN METHOD_ADD(ApiController::get, "/get", Get); METHOD_ADD(ApiController::post, "/post", Post); METHOD_LIST_END // your declaration of processing function maybe like this: void get(const HttpRequestPtr& req, Callback &&callback); void post(const HttpRequestPtr& req, Callback &&callback ) const; };
服务器配置文件
{ "listeners": [ { "address": "0.0.0.0", "port": 8080, "https": false } ], "app": { "server_header_field": "" } }
排查方向
- 确保控制器有实现文件并被编译:Drogon的静态注册逻辑依赖控制器类的实现代码触发,仅头文件声明不会生成注册代码。需创建
ApiController.cpp实现成员函数,并将其加入CMake的编译源文件列表,例如:add_executable(your_server main.cpp ApiController.cpp) target_link_libraries(your_server drogon) - 检查回调类型正确性:头文件中的
Callback需是drogon::HttpResponseCallback的别名,若未使用using namespace drogon;,需显式声明为drogon::HttpResponseCallback,避免类型不匹配导致注册失败。 - 显式注册控制器:若静态注册未生效,可在main函数中显式注册控制器实例,确保框架加载:
int main() { drogon::app().registerController(std::make_shared<ApiController>()); drogon::app().run(); return 0; } - 检查路由冲突:确认没有其他路由(如静态资源路由、其他控制器)占用
/get路径,Drogon会优先匹配先注册的路由。 - 验证编译环境:确保项目使用C++17及以上标准编译,且正确链接Drogon库,编译选项缺失可能导致控制器注册逻辑无法正常运行。
内容的提问来源于stack exchange,提问作者Alexander Kolbeko
相关产品推荐
相关产品推荐

