c++ QHttpServer使用多个参数添加路由

g52tjvyc  于 2022-12-01  发布在  其他
关注(0)|答案(1)|浏览(346)

帮助处理QHttpServer。我知道QHttpServer目前处于预览状态。我有下面的代码来添加路由到服务器:

template<typename  Args>
bool addHandlerWithParams(const QString &_route, QHttpServerRequest::Method _method, std::function<QHttpServerResponse(const QVariantMap&, Args&)>f)
{
    // example: POST http://127.0.0.1/test/<arg>
    
    return m_restServer->route(_route, _method, [this, f](const Args& args, const QHttpServerRequest &_req){
        QVariantMap value;
        const auto body = byteArrayToJsonObject(_req.body());
        if (body)
            value = (*body).toVariantMap();
        return QtConcurrent::run([value, args, f]()
        {
            Args arg = args;
            return f(value, arg);
        });
    });
}

这里,每个处理程序接收2个参数:json(检查主体和格式是否存在被省略了)和一个来自请求的参数。这很好用。但是由于我对模板C++不是很精通,问题就出现了:如何为多个参数添加处理程序(http://127.0.0.1/test//)?
我尝试使用变量模板,但我很不擅长,最后我只得到一个错误,即无法从std::frunction〈Args...,const QVariantMap&〉推断类型

bn31dyow

bn31dyow1#

举个简单的例子,m_srv是一个指向QHttpServer示例的指针:

m_srv->route("/<arg>/<arg>/", QHttpServerRequest::Method::Get, [this](const QString &firstArg, const QString &secondArg, const QHttpServerRequest &request) {
    qDebug() << firstArg << secondArg;
    return "Ok";
});

相关问题