mongoose httpserver

上一期成功用mongoose 在网页上呈现出了一个hello world,感觉好像很简单的样子,但是对没弄过前端的人来说,真的是一个简单的知识点都卡住好久。
现在就是想呈现出网页,网上的例子大多是mg_serve_http,这个可以把默认的index.html呈现出来,没问题,我也随便网上抄了个简单的登录页面作为主页,
void HttpServer::HandleHttpEvent(mg_connection *connection, http_message *http_req)
{
	std::string req_str = std::string(http_req->message.p, http_req->message.len);

	// 先过滤是否已注册的函数回调
	std::string url = std::string(http_req->uri.p, http_req->uri.len);
	std::string body = std::string(http_req->body.p, http_req->body.len);
	auto it = s_handler_map.find(url);
	if (it != s_handler_map.end())
	{
		ReqHandler handle_func = it->second;
		handle_func(url, body, connection, &HttpServer::SendHttpRsp);
	}

    if (route_check(http_req, "/")) // index page
		mg_serve_http(connection, http_req, s_server_option);

hello world也弄出来了,网页也有了,是不是感觉要起飞了,no,这是马上要掉下来,重重摔地上了,我的html里有javascript代码啊,这个浏览器咋识别啊。
搞过java的都知道JVM,这个JavaScript也要类似的东西解析那些javascript代码啊。搜了百度,发现可以引入jquery-1.11.0.min.js,这样浏览器就能解析了。但是我怎么把这个js文件发给浏览器呢,调试一下,发现浏览器请求index的时候,html里引入的这个语句,浏览器也发送了get /jquery-1.11.0.min.js请求过来。
这里卡住好久才知道要读取html文件到缓冲区,然后和发送别的什么json应答一样,将缓冲区发送出去就可以了。

            std::ifstream file("jquery-1.11.0.min.js"); // 替换为你的HTML文件名
            std::string content;
            std::string line;
            while (getline(file, line)) {
                content += line;
            }
            file.close();

            mg_printf(connection, "%s", "HTTP/1.1 200 OK\r\nTransfer-Encoding: chunked\r\n\r\n");

            mg_printf_http_chunk(connection, "%s", content.c_str());
            // 发送空白字符快,结束当前响应
            mg_send_http_chunk(connection, "", 0);

js文件可以发了,其他的html文件就是一样的,虽然后面还有很多问题要解决,但都是细节了,这个大的难题突破了。
可能能力强的觉得这些太过小儿科了,但是对我来说,真的是费了点功夫,就这样一点点涉足自己不熟悉的,打破恐惧,提高自己学习其他领域知识的能力,这样的收获才是自己想要的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值