restbed icon indicating copy to clipboard operation
restbed copied to clipboard

The size of the body may cause problems

Open gaowanlu opened this issue 2 years ago • 2 comments

code block

            void POST(const std::shared_ptr<restbed::Session> session)
            {
                const auto request = session->get_request();
                long long int content_length = stoll(request->get_header("Content-Length", "0"));
                std::pair<bool, std::string> res;
                session->fetch(content_length, [](const std::shared_ptr<restbed::Session> session, const restbed::Bytes &body) -> void
                               {
                                if(body.size()>485918){//maxsize
                                    return;
                                }
                                std::cout << body.size() << std::endl;
                                // string m_body(body.begin(), body.end());
                                // std::cout << m_body.size() << std::endl;
                                // colnago::dao::Post postObj;
                                //    postObj.parse(string(body.begin(), body.end()));
                                //    colnago::server::server.postDao->INSERT(postObj);
                                   std::cout << "INSERT END" << std::endl; });
                // BaseResponse<> response(res.first, res.second);
                session->close(restbed::OK, "", {{"Content-Type", "application/json"}});
                std::cout << "POST END" << std::endl;
            }

When the size of the body is large, the lambda expression cannot be triggered, what are the possible reasons for this phenomenon?

gaowanlu avatar Sep 06 '22 12:09 gaowanlu

POST END
779
INSERT END
POST END
947
INSERT END
POST END
1082
INSERT END
POST END
1220
INSERT END
POST END
1220
INSERT END
POST END
1334
INSERT END
POST END
1448
INSERT END
POST END
POST END

gaowanlu avatar Sep 06 '22 13:09 gaowanlu

It's ok,now, I review HTTP_SERVICE sample.to call session->close in lambda.

            void POST(const std::shared_ptr<restbed::Session> session)
            {
                const auto request = session->get_request();
                long long int content_length = stoll(request->get_header("Content-Length", "0"));
                auto handler = [](const std::shared_ptr<restbed::Session> session, const restbed::Bytes &body) -> void
                {
                    string m_body(body.begin(), body.end());
                    colnago::dao::Post postObj;
                    postObj.parse(string(body.begin(), body.end()));
                    std::pair<bool, std::string> res = colnago::server::server.postDao->INSERT(postObj);
                    BaseResponse<> response(res.first, res.second);
                    session->close(restbed::OK, response.stringify(), {{"Content-Type", "application/json"}});
                };
                session->fetch(content_length, handler);
            }

gaowanlu avatar Sep 07 '22 09:09 gaowanlu