我在处理充当 Web 服务器的 ESP 上的请求时遇到问题。 基本上这段代码:
#include <WebServer.h> //using this library
...
webServer.on("/api/:userId/lights", HTTP_GET, [this]() { handle_GetState(); });
webServer.on("/api/:userId/lights/:num", HTTP_GET, [this]() { handle_GetState(); });
webServer.on("/api/:userId/lights/:num/state", HTTP_PUT, [this]() { handle_PutState(); });
webServer.on("/", HTTP_GET, [this]() { handle_root(); });
webServer.on("/debug/clip.html", HTTP_GET, [this]() { handle_clip(); });
webServer.onNotFound( [this]() { handle_CORSPreflight(); });
应该处理动态路径参数,但在发出请求时(例如:/api/USERXXX/lights),它始终由 onNotFound 函数处理。
我尝试将 ':userId' 替换为 '{}'、'{userId}'、'
有人知道哪种方法是正确的吗?
看起来你的端点需要是这样的:
webServer.on(UriRegex("^\\/api\\/(.*)\\/lights$"), HTTP_GET, [this]() { handle_GetState(); });
webServer.on(UriRegex("^\\/api\\/(.*)\\/lights\\/([0-9]+)$"), HTTP_GET, [this]() { handle_GetState(); });
webServer.on(UriRegex("^\\/api\\/(.*)\\/lights\\/[0-9]+\\/state$"), HTTP_PUT, [this]() { handle_PutState(); });
webServer.on("/", HTTP_GET, [this]() { handle_root(); });
webServer.on("/debug/clip.html", HTTP_GET, [this]() { handle_clip(); });
webServer.onNotFound( [this]() { handle_CORSPreflight(); });
使用 URI 正则表达式,您可以在端点处理函数中利用对 webServer 的引用来执行以下操作:
String userId = webServer.pathArg(0);
String lightNum = webServer.pathArg(1);
这应该允许您获取正则表达式 URI 的捕获部分。如果您是正则表达式的新手,则捕获的部分是正则表达式语句中位于括号“()”中的部分,第一个捕获是索引 0,然后从那里开始依此类推。