从 ESPAsyncWebServer 请求参数读取数据时出现 guru meditation 错误
guru meditation error when reading data from ESPAsyncWebServer request parameters
我正在研究 ESP32,这个设备是新手。
我目前遇到以下错误。
当我尝试从 request->value().c_str() 读取数据时,串行监视器向我显示 guru meditation error 错误
错误的SS:
我的代码:
server.on("/register", HTTP_POST, [](AsyncWebServerRequest *request) {
request->send(200, "text/plain", Register(request->getParam("plain",true)).c_str());
});
函数:
string Register(AsyncWebParameter *request){
const size_t bufferSize = JSON_OBJECT_SIZE(1) + 250;;
StaticJsonDocument<bufferSize> data;
deserializeJson(data, request->value().c_str()); // facing issue here when request->value().c_str() is called
const char* name = data["username"];
return String("Execution complete");
}
我有 return 简单的 javascript 函数来调用 API:
function Register() {
const tosend={
"username":"Mohit",
"password":"Mohit10#",
"lastname":"mhatre",
"firstname":"Mohit"
};
const url="http://192.168.2.120/register";
fetch(url, {
method: 'post',
headers: {
// if you want to set
},
body: tosend
})
.then(
function(response) {
response.json().then(function(data) {
console.log(data);
});
}
)
.catch(function(err) {
console.log('Fetch Error :-S', err);
});
}
谁能帮我解决这个问题,我是新手,从昨天就卡在这里了
我解决了这个问题。
正如 Botje 在上面的评论中所描述的那样。
问题是 Register(request->getParam("plain",true)).c_str() 返回空结果,所以当我尝试访问它们时,esp 导致了问题。
以下是我所做的代码更改:
服务器代码:
server.on("/register", HTTP_POST, [](AsyncWebServerRequest *request){request->send(200, "text/plain", "");}, NULL, Register);
函数
void Register(AsyncWebServerRequest *request, uint8_t *data, size_t len, size_t index, size_t total)
{
chipid=ESP.getEfuseMac();
StaticJsonDocument<200> doc;
deserializeJson(doc, data);
doc["device_id"] = (uint16_t)(chipid>>32)+(uint32_t)chipid;
char jsonBuffer[512];
serializeJson(doc, jsonBuffer);
// used the json as required.
}
我正在研究 ESP32,这个设备是新手。
我目前遇到以下错误。
当我尝试从 request->value().c_str() 读取数据时,串行监视器向我显示 guru meditation error 错误
错误的SS:
我的代码:
server.on("/register", HTTP_POST, [](AsyncWebServerRequest *request) {
request->send(200, "text/plain", Register(request->getParam("plain",true)).c_str());
});
函数:
string Register(AsyncWebParameter *request){
const size_t bufferSize = JSON_OBJECT_SIZE(1) + 250;;
StaticJsonDocument<bufferSize> data;
deserializeJson(data, request->value().c_str()); // facing issue here when request->value().c_str() is called
const char* name = data["username"];
return String("Execution complete");
}
我有 return 简单的 javascript 函数来调用 API:
function Register() {
const tosend={
"username":"Mohit",
"password":"Mohit10#",
"lastname":"mhatre",
"firstname":"Mohit"
};
const url="http://192.168.2.120/register";
fetch(url, {
method: 'post',
headers: {
// if you want to set
},
body: tosend
})
.then(
function(response) {
response.json().then(function(data) {
console.log(data);
});
}
)
.catch(function(err) {
console.log('Fetch Error :-S', err);
});
}
谁能帮我解决这个问题,我是新手,从昨天就卡在这里了
我解决了这个问题。 正如 Botje 在上面的评论中所描述的那样。 问题是 Register(request->getParam("plain",true)).c_str() 返回空结果,所以当我尝试访问它们时,esp 导致了问题。
以下是我所做的代码更改:
服务器代码:
server.on("/register", HTTP_POST, [](AsyncWebServerRequest *request){request->send(200, "text/plain", "");}, NULL, Register);
函数
void Register(AsyncWebServerRequest *request, uint8_t *data, size_t len, size_t index, size_t total)
{
chipid=ESP.getEfuseMac();
StaticJsonDocument<200> doc;
deserializeJson(doc, data);
doc["device_id"] = (uint16_t)(chipid>>32)+(uint32_t)chipid;
char jsonBuffer[512];
serializeJson(doc, jsonBuffer);
// used the json as required.
}