Mongoose должен сделать HTML-файл

Я заметил, что когда обработчик событий сервера 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;
}

Какие-либо предложения? Заранее спасибо.

2

Решение

  1. Задавать document_root вариант.
  2. + Изменить // HELP ME HERE в return MG_FALSE;

Практическое правило: если обработчик события возвращает MG_FALSE, то mongoose выполняет действие по умолчанию. За MG_REQUEST Событием по умолчанию является обслуживание запрошенного файла.

3

Другие решения


По вопросам рекламы [email protected]