Обобщить маршрутизацию веб-сервера

Я следую примерам для ESP32:

  AsyncWebServer _server(80);

  _server.on("/", HTTP_GET, [](AsyncWebServerRequest *request)
  {
    request->send(SPIFFS, "/index.html", String(), false);
  });

  _server.on("/css/index.css", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send(SPIFFS, "/css/index.css", "text/css");
  });

  _server.onNotFound([](AsyncWebServerRequest *request){
    request->send(404);
  });

_server.begin();

При таком подходе я должен заранее знать каждый файл, который я храню в SPIFFS, и добавлять обработчик для каждого из них.

Есть ли более элегантный способ автоматического обслуживания любого файла, существующего во флэш-памяти?

, 👍1


1 ответ


Лучший ответ:

3

Вы можете указать веб-серверу обслуживать статический контент из определенной папки:

server.serveStatic("/", SPIFFS, "/").setDefaultFile("index.html");

В этом случае он обслуживает по корневому URL-адресу содержимое из корня SPIFFS. Итак, если я размещу файл с именем image.jpg в корне СПЕЦИЙ он будет подаваться по адресу /image.jpg. Для получения дополнительной информации вы можете обратиться к соответствующему разделу файла libraries Readme.

,

Что на самом деле означает статический в данном конкретном контексте?, @Mark

В данном случае это означает файлы, которые помещаются в SPIFFS (он же flash). Эти файлы, конечно, также могут быть записаны и, таким образом, предоставлять более динамичный контент. Но тогда вам следует иметь в виду ограниченные циклы записи флэш-памяти. Таким образом, он в основном предназначен для статических (не изменяющихся) файлов вашего сайта, но также может использоваться для обслуживания изменяющихся файлов. В одном из моих проектов я использую его для обработки файла журнала относительно редких событий, @chrisl