如何将 CORS 标头添加到我的 esp32 网络服务器

Luk*_*kas 0 javascript webserver arduino-ide iot esp32

我遇到的问题是,由于 Access-Control-Allow-Origin 错误,我无法从创建的 .json 中 fetch() 。我发现我必须创建某种标头,但我不知道这样的命令在我使用的库中是什么样子以及必须选择哪些参数。我希望您能帮助我对此代码进行必要的添加。

\n
#include <ArduinoJson.h>\n#include <WiFi.h>\n#include <WebServer.h>\n#include <DHT.h>\n\n#define DHTPIN 13\n#define DHTTYPE DHT11\n\nDHT dht(DHTPIN, DHTTYPE);\n\nconst char *ssid = "XXX";\nconst char *pwd = "XXX";\n\nStaticJsonDocument<250> jsonDocument;\nchar buffer[250];\n\nfloat temperature;\nfloat humidity;\n\nWebServer server(80);\n\nvoid setup() {\ndht.begin();\nSerial.begin(9600);\nSerial.println(WiFi.localIP());  \nSerial.print("Connect to: ");\nSerial.println(ssid);\nWiFi.begin(ssid, pwd);\n  while (WiFi.status() != WL_CONNECTED){\n    Serial.print(".");\n    delay(500);\n  }\nSerial.print("Connected. IP: ");\nSerial.println(WiFi.localIP());\nsetup_routing();\n}\n\nvoid setup_routing(){\n  server.on("/sensor", getEnv);\n  sendHeader()\n  server.begin();\n}\n\nvoid create_json(char *tag, float value, char *unit){\n  jsonDocument.clear();\n  jsonDocument["type"] = tag;\n  jsonDocument["value"] = value;\n  jsonDocument["unit"] = unit;\n  serializeJson(jsonDocument, buffer);\n}\n\nvoid add_json_object(char *tag, float value, char *unit){\n  JsonObject obj = jsonDocument.createNestedObject();\n  obj["type"] = tag;\n  obj["value"] = value;\n  obj["unit"]  = unit;\n}\n\nvoid read_sensor_data(void * parameter) {\n     for (;;) {\n     temperature = dht.readTemperature();\n     humidity = dht.readHumidity();\n     }\n     delay(2000);  \n}\n\nvoid getEnv() {\n  float temperature = dht.readTemperature();\n  float humidity = dht.readHumidity();\n  \n  jsonDocument.clear();\n  add_json_object("temperature", temperature, "\xc2\xb0C");\n  add_json_object("humidity", humidity, "%");\n  \n  serializeJson(jsonDocument, buffer);\n  server.send(200, "application/json", buffer);\n}\n\nvoid loop() {\nserver.handleClient();\n}\n
Run Code Online (Sandbox Code Playgroud)\n

Wac*_*ilo 7

事实是,你不需要。它WebServer本身有 API 可以自动发送 CORS 标头。您所需要做的就是在设置中启用它。请参阅下面的示例:

void setup_routing(){
  server.enableCORS(); //This is the magic
  server.on("/sensor", getEnv);
  server.begin();
}
Run Code Online (Sandbox Code Playgroud)

如果这不起作用,请随时发表评论。我稍后会更新我的答案。