您的位置:首页 > 文旅 > 美景 > drogon orm分页问题,req->getJsonObject()为空会导致Segmentation fault

drogon orm分页问题,req->getJsonObject()为空会导致Segmentation fault

2024/12/23 11:24:52 来源:https://blog.csdn.net/zh7314/article/details/139885705  浏览:    关键词:drogon orm分页问题,req->getJsonObject()为空会导致Segmentation fault

2024年6月22日17:14:12

req->getJsonObject()获取json数据的时候,如果没有提前判断

        if (req->getJsonObject() == nullptr){throw std::invalid_argument("参数json不能为空");}auto jsonPtr = req->getJsonObject();

官方文档:https://github.com/drogonframework/drogon/wiki/CHN-08-3-%E6%95%B0%E6%8D%AE%E5%BA%93-ORM#mapper%E7%9A%84%E9%93%BE%E5%BC%8F%E6%8E%A5%E5%8F%A3
Mapper的链式接口
有些常见的sql约束,比如limit,offset等等,Mapper类模板也提供了支持,以链式接口的形式提供,意味着用户可以把多个约束串起来写。执行完任何一个接口,这些约束会被清空,也就是说,这些约束是在一次操作中有效的,比如:

Mapper<Users> mp(dbClientPtr);
auto users = mp.orderBy(Users::Cols::_join_time).limit(25).offset(0).findAll();

注意这里的limit offset是sql的原意,不是我们常用的封装过的orm,所以需要自己去维护一下offset
这段程序是从users表中选择用户列表,每页25行的第一页

 Json::Value ret;ret["code"] = SUCCESS;ret["msg"] = SUCCESS_MSG;try{if (req->getJsonObject() == nullptr){throw std::invalid_argument("参数json不能为空");}auto jsonPtr = req->getJsonObject();// 转换指针auto pJson = *jsonPtr;LOG_DEBUG << pJson.toStyledString();// 获取对应的参数std::string page = pJson.get("page", 1).asString();std::string pageSize = pJson.get("pageSize", 10).asString();auto offset = (std::stoi(page) - 1) * std::stoi(pageSize);auto clientPtr = drogon::app().getDbClient();Mapper<Admin> mp(clientPtr);LOG_DEBUG << std::stoi(pageSize);LOG_DEBUG << std::stoi(page);std::vector<Admin> admin_list = mp.orderBy(Admin::Cols::_id).limit(std::stoi(pageSize)).offset(offset).findAll();auto count = admin_list.size();auto list = admin_list;Json::Value data;data["count"] = count;Json::Value json_list;if (count > 0){for (auto admin : admin_list){json_list.append(admin.toJson());}}data["list"] = json_list;ret["data"] = data;auto resp = HttpResponse::newHttpJsonResponse(ret);resp->setStatusCode(k200OK);callback(resp);}catch (std::exception &e){ret["code"] = FAIL;LOG_ERROR << e.what();ret["msg"] = e.what();auto resp = HttpResponse::newHttpJsonResponse(ret);resp->setStatusCode(k200OK);callback(resp);}

链式接口基本可以望文生义,这里不再一一赘述,请参考Mapper.h头文件。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com