You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 22:02:10