如何使cesanta mongoose嵌入式web服务器动态化?

1l5u6lss  于 12个月前  发布在  Go
关注(0)|答案(1)|浏览(111)
void fn(struct mg_connection *c, int ev, void *ev_data, void *fn_data)
{

    char ip[32], subnet[32], gw[32];

    if (ev == MG_EV_HTTP_MSG)
    {
        ip = get_ip();
        subnet = get_subnet();
        gw = get_gateway();
        
        struct mh_http_message *hm = (struct mg_http_message *) ev_data;
        
        if (mg_http_match_uri(hm, "/device/info"))
        {
            
            mg_http_reply(c, 200, "Content-Type: text/html\r\n", ""

            "<!DOCTYPE html>"
            "<html>"
            "<head>"
            "</head>"
            "<body>"

            "<h2>IP address: %s</h2>"
            "<h2>Netmask: %s</h2>"
            "<h2>Gateway: %s</h2>"

            "</body>"
            "</html> "

            "", ip, subnet, gw);
        }
    }
}

int main()
{
    struct mg_mgr mgr;
    mg_mgr_init(&mgr);
    mg_http_listen(&mgr, "http://10.0.0.6:8000", fn, &mgr);
    for (;;) mg_mgr_poll(&mgr, 1000);
}

我正在使用mongoose开发一个嵌入式web服务器。目前,我使用mg_http_reply()将整个HTML页面作为字符串发送。有没有更好的方法来做到这一点,比如直接在HTML代码本身中给出变量名(动态)?
我读过两件事:
1.使用ssi,无法从main函数获取变量(ip,subnet,gw)到HTML。
1.我使用像PHP这样的脚本语言,但我认为我的DSP(adsp bf518)可能不支持它。

bwleehnv

bwleehnv1#

Mongoose 作者来了。
正确的做法是将服务器分成两部分:
1.静态部分,提供静态页面,如HTML,CSS,图像等
1.一个动态部分,用于服务RESTful API请求
浏览器下载静态UI,然后开始调用REST API。这个代码片段演示了这个想法:

static void fn(struct mg_connection *c, int ev, void *ev_data, void *fn_data) {
  if (ev == MG_EV_HTTP_MSG) {
    struct mg_http_message *hm = (struct mg_http_message *) ev_data;
    if (mg_http_match_uri(hm, "/api/hello")) {              // On /api/hello requests,
      mg_http_reply(c, 200, "", "{%m:%d}\n",
                    MG_ESC("status"), 1);                   // Send dynamic JSON response
    } else {                                                // For all other URIs,
      struct mg_http_serve_opts opts = {.root_dir = "."};   // Serve files
      mg_http_serve_dir(c, hm, &opts);                      // From root_dir
    }
  }
}

有很多例子可供选择。我建议阅读整个WebUI部分:https://mongoose.ws/documentation/#web-ui
“设备 Jmeter 板”示例是您应该用作参考的示例:https://github.com/cesanta/mongoose/tree/master/examples/device-dashboard

相关问题