我目前正在使用 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;
}
我尝试过的事情
有没有人遇到过类似的问题,或者有没有人了解可能导致此问题的原因以及如何解决它?
预先感谢您的帮助!
尝试通过插件来完成
使用命令创建插件
drogon_ctl 创建插件 AuthController
添加您的方法 initUsersTable() 并添加对 AuthController::initAndStart 函数的调用
AuthController::initUsersTable()
将行添加到 config.json 文件
“插件”:[ { “名称”:“AuthController”, “依赖项”:[], “配置”:{ } } ]