连接 Neon PostgreSQL 时数据库客户端未初始化

问题描述 投票:0回答:1

我目前正在使用 Drogon Web 框架开发一个 C++ 项目,旨在连接到 Neon 上托管的 PostgreSQL 数据库。但是,我遇到了数据库客户端无法初始化的持续问题,并且我无法确定根本原因。

尝试初始化数据库客户端时,getDbClient() 返回 nullptr,表示连接尝试不成功。错误消息证实了这一点:“数据库客户端未初始化”。

这是我的 config.json 中用于设置数据库客户端的相关部分(为了安全起见,省略了密码):

"dbClients": [
  {
    "rdbms": "postgresql",
    "host": "ep-proud-hall-a29l37uu.eu-central-1.aws.neon.tech",
    "port": 5432,
    "dbname": "patrol_system",
    "user": "users_owner",
    "passwd": "[Password Omitted for Security]",
    "sslmode": "require",
    "filename": "",
    "isFast": false,
    "timeout": 5,
    "client_encoding": "UTF8"
  }
]

初始化数据库表函数

void AuthController::initUsersTable() {
    auto client = drogon::app().getDbClient();
    if (!client) {
        LOG_ERROR << "Database client is not initialized";
        return;
    }
    std::string createTableSql = R"(
        CREATE TABLE IF NOT EXISTS users (
            id SERIAL PRIMARY KEY,
            username VARCHAR(255) UNIQUE NOT NULL,
            password_hash VARCHAR(255) NOT NULL
        );
    )";
    client->execSqlAsync(
            createTableSql,
            [](const drogon::orm::Result& result) {
                LOG_INFO << "Table 'users' checked/created successfully.";
            },
            [](const drogon::orm::DrogonDbException& e) {
                LOG_ERROR << "Error checking/creating table 'users': " << e.base().what();
            }
    );
}

这是我在主函数中调用初始化的方法:

int main()
{
  LOG_DEBUG << "Server is running"
            << "\n";

  drogon::app().loadConfigFile("../config.json");

  AuthController::initUsersTable();

  drogon::app().run();

  return 0;
}

我尝试过的事情

有没有人遇到过类似的问题,或者有没有人了解可能导致此问题的原因以及如何解决它?

预先感谢您的帮助!

c++ postgresql backend drogon-framework
1个回答
0
投票

尝试通过插件来完成

  • 使用命令创建插件

    drogon_ctl 创建插件 AuthController

  • 添加您的方法 initUsersTable() 并添加对 AuthController::initAndStart 函数的调用

    AuthController::initUsersTable()

  • 将行添加到 config.json 文件

    “插件”:[ { “名称”:“AuthController”, “依赖项”:[], “配置”:{ } } ]

© www.soinside.com 2019 - 2024. All rights reserved.