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

问题描述 投票:0回答:1

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

#include <ArduinoJson.h>
#include <WiFi.h>
#include <WebServer.h>
#include <DHT.h>

#define DHTPIN 13
#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);

const char *ssid = "XXX";
const char *pwd = "XXX";

StaticJsonDocument<250> jsonDocument;
char buffer[250];

float temperature;
float humidity;

WebServer server(80);

void setup() {
dht.begin();
Serial.begin(9600);
Serial.println(WiFi.localIP());  
Serial.print("Connect to: ");
Serial.println(ssid);
WiFi.begin(ssid, pwd);
  while (WiFi.status() != WL_CONNECTED){
    Serial.print(".");
    delay(500);
  }
Serial.print("Connected. IP: ");
Serial.println(WiFi.localIP());
setup_routing();
}

void setup_routing(){
  server.on("/sensor", getEnv);
  sendHeader()
  server.begin();
}

void create_json(char *tag, float value, char *unit){
  jsonDocument.clear();
  jsonDocument["type"] = tag;
  jsonDocument["value"] = value;
  jsonDocument["unit"] = unit;
  serializeJson(jsonDocument, buffer);
}

void add_json_object(char *tag, float value, char *unit){
  JsonObject obj = jsonDocument.createNestedObject();
  obj["type"] = tag;
  obj["value"] = value;
  obj["unit"]  = unit;
}

void read_sensor_data(void * parameter) {
     for (;;) {
     temperature = dht.readTemperature();
     humidity = dht.readHumidity();
     }
     delay(2000);  
}

void getEnv() {
  float temperature = dht.readTemperature();
  float humidity = dht.readHumidity();
  
  jsonDocument.clear();
  add_json_object("temperature", temperature, "°C");
  add_json_object("humidity", humidity, "%");
  
  serializeJson(jsonDocument, buffer);
  server.send(200, "application/json", buffer);
}

void loop() {
server.handleClient();
}
javascript webserver iot esp32 arduino-ide
1个回答
6
投票

事实是,你不需要。

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.