乐鑫技术交流
直播中

陈静

7年用户 1284经验值
私信 关注
[问答]

在类成员中使用ESP8266WebServer serverStatic方法是什么?

在我的 ESP8266 上验证了基本的 ESP8266WebServer 功能后,我想将一些设置方法重构到一个自己的类中(基本上是 ESP8266WebServer 类的抽象层)。因此,我创建了一个 ESP8266WebServer 指针作为类“Webserver”的成员(参见附加代码“Webserver.h”和“Webserver.cpp”)。
我现在想配置服务器根路由(“/”)以提供来自 SPIFFS 的静态 HTML 文件“index.html”。但是,当我使用“Webserver.cpp”中所示的“serveStatic”方法时,我的 esp 在通过浏览器访问它时返回一个空响应(ERR_EMPTY_RESPONSE)(这在以前有效,因此它必须重构为一个单独的类)。
在调查这个问题后发现其他人也有类似的问题(例如

) 在封装的 ESP8266WebServer 实例中使用“server.on()”方法时。当我使用“server.on()”(参见“Webserver.cpp”中的评论)时,我验证了该修复程序是否有效。但是,出于我的目的,我无法应用建议的修复(使用 std::bind)。
我感谢任何建议和反馈。
最好的问候,
GuyWithCookies
Webserver.h
代码:全选/**
* Class that handles webserver initalization
**/

#ifndef WEBSERVER_H
#define WEBSERVER_H

#include
#include

class Webserver {
public:
    Webserver();
    bool setup();
    void handleClient();
    void handleRoot();

private:
    ESP8266WebServer* server;

    void setupWebserverRoutes();
    bool setupFileSystem();
};

#endif


网络服务器.cpp
代码:全选#include "Webserver.h"

#include
#include
#include
#include

Webserver::Webserver() {
    std::cout << "Create webserver instance" << std::endl;
    this->server = new ESP8266WebServer();
}

void Webserver::handleRoot(){
    char content[]  = "Hello world";
    this->server->send(200, "text/plain", content);
}

void Webserver::setupWebserverRoutes() {
     // Using "server.on" works (hello world is displayed in browser).
    // However I need to serve the index.html instead which uses serveStatic and produces the aforementioned
    // issue
    //this->server->on("/",  std::bind(&Webserver::handleRoot, this));
     this->server->serveStatic("/", SPIFFS, "/index.html");
};

bool Webserver::setupFileSystem() {
    if (!SPIFFS.begin()) {
        Serial.println("SPIFFS Mount failed");
        return false;
    } else {
        Serial.println("SPIFFS Mount successfull");
        return true;
    }
};


bool Webserver::setup() {
    // Setup all routes for the website
    Webserver::setupWebserverRoutes();

    if (!Webserver::setupFileSystem()) {
        return false;
    }

    this->server->begin()
    return true;
}

void Webserver::handleClient() {
    this->server->handleClient();
}

更多回帖

发帖
×
20
完善资料,
赚取积分