c++ - Mongoose 应该渲染一个 html 文件

标签 c++ webserver mongoose-web-server

我观察到,当 Mongoose 服务器事件处理程序为 NULL 时,HTML 文件(例如 localhost:8080/index.html)会毫无问题地呈现。

以下代码取自 Mongoose Github 存储库 https://github.com/cesanta/mongoose 的示例。 .

int main(void) {
    struct mg_server *server = mg_create_server(NULL, NULL);

    mg_set_option(server, "listening_port", "8080");

    printf("Starting on port %s\n", mg_get_option(server, "listening_port"));
    for (;;) {
        mg_poll_server(server, 1000);
    }

    mg_destroy_server(&server);

    return 0;
}

我想使用Mongoose的事件处理程序来处理请求。在这里看到了一个教程:https://github.com/cesanta/mongoose/blob/master/examples/post.c 。唯一的问题是我无法访问我的 index.html 文件,除非它被初始化为嵌入文件,如下面的代码所示。我想删除嵌入的文件版本并渲染实际的 html 文件。

#include <stdio.h>
#include <string.h>
#include "mongoose.h"

static const char *html_form =   
    "<html><body>"
    "<form action=\"/handle_request\">"
        "<input type=\"text\" name=\"request_value\" /> <br/>"
    "<input type=\"submit\" />"
    "</form></body></html>";

static void send_reply(struct mg_connection *conn) {
    char value[500];

    if(strcmp(conn->uri, "/handle_request") == 0) {
        mg_get_var(conn, "request_value", value, sizeof(value));
        mg_send_header(conn, "Content-Type", "text/plain");

        mg_printf_data( conn, value );
    } if(strcmp(conn->uri, "/index.html") == 0) {
        // #######################
        //      HELP ME HERE 
        // #######################
        //  Render the html file.
        // #######################
    } else {
        mg_send_data(conn, html_form, strlen(html_form));
    }
}

static int ev_handler( struct mg_connection *conn, enum mg_event ev ) {
    if ( ev == MG_REQUEST ) {
        send_reply( conn );
        return MG_TRUE;
    } else if ( ev == MG_AUTH ) {
        return MG_TRUE;
    } else {
        return MG_FALSE;
    }
}

int main(void) {
    struct mg_server *server = mg_create_server(NULL, ev_handler);

    mg_set_option(server, "listening_port", "8080");

    printf("Starting on port %s\n", mg_get_option(server, "listening_port"));
    for (;;) {
        mg_poll_server(server, 1000);
    }

    mg_destroy_server(&server);

    return 0;
}

有什么建议吗?提前致谢。

最佳答案

  1. 设置document_root选项。
  2. //HELP ME HERE 更改为 return MG_FALSE;

经验法则是:如果事件处理程序返回 MG_FALSE,则 mongoose 执行默认操作。对于 MG_REQUEST 事件,默认操作是提供请求的文件。

关于c++ - Mongoose 应该渲染一个 html 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24322675/

相关文章:

c++ - 如何正确组织继承类以利用多态性?

c++ - 为什么允许内联函数操作私有(private)成员变量?

node.js - 如何在网络服务器上安装 easyrtc?

c++ - Mongoose 服务器回调循环

c++ - std::map - 删除最后一个元素

c++ - C 服务器 - "The connection was reset"

mysql - 谁删除了mysql数据库中的所有表

c++ - C++中的 Mongoose 服务器

python - 在 Mongoose 中运行 Python 脚本

c++ - 遗产。如何让 child = parent